標籤:style ar 使用 for sp 資料 on 問題 ad
1、select 查詢
單獨的一條 select 語句
在PL/SQL中通過SELECT從資料庫中檢索資料:
文法:
<1> 必須使用INTO子句
<2> 查詢必須並且只能返回一行
<3> 可以使用完整的SELECT 文法
| 使用SELECT 命令,可以從資料庫中取出單行資料 |
|
| 使用DML命令,修改資料庫中的行 |
|
|
| 使用COMMIT 或ROLLBACK 命令控制事務 |
|
|
| 通過EXECUTE IMMEDIATE,執行DDL |
|
|
1、查看欄位類型
select * From all_tab_columns where table_name=upper(‘表名‘);
2、is與as
在 預存程序 和 函數 中沒有區別;在 視圖 中只能用 AS 不能用 IS ;在 遊標 中只能用 IS 不能用 AS 。 從其定義也可以看出沒什麼區別。
create [or replace] procedure procedure_name
[(parameter_name [in | out | in out] type [,........])]
{is | as}
begin
procedure_body
end procedure_name;
3、EXECUTE IMMEDIATE。解析並馬上執行動態SQL語句或非運行時建立的PL/SQL塊。
提示:
1. EXECUTE IMMEDIATE將不會提交一個DML事務執行,應該顯式提交
如果通過EXECUTE IMMEDIATE處理DML命令,那麼在完成以前需要顯式提交或者作為EXECUTE
IMMEDIATE自己的一部分. 如果通過EXECUTE IMMEDIATE處理DDL命令,它提交所有以前改變的資料
2. 不支援返回多行的查詢。
3. 當執行SQL語句時,不要用分號,當執行PL/SQL塊時,在其尾部用分號;
4.舉例:execute immediate ‘select count(1) from tempA‘。
問題:如何讓過程返回資料集?
回答:
關鍵有兩點:一是使用out類型的參數。二是該參數使用特殊資料類型:系統引用遊標類型(sys_refCursor)。
過程返回資料集,可以在PL/SQL程式中由另一個塊或過程接收;
問題:cursor類型與sys_refCursor類型有什麼區別?
回答:
Cursor是遊標類型,代表是資料集本身,只能在PL/SQL程式中關閉;可以通過遊標FOR迴圈或者定義cursor來完成。
而sys_refCursor代表的是遊標的引用,即資料集的引用地址,只能通過open for語句來完成。
兩者的最大區別是後者可以將這個地址傳遞給其它程式。
問題:據說“ref cursor類型”也能夠返回資料集,與sys_refCursor有什麼關係?
回答: ref cursor是Oracle舊版本中使用的資料類型,用這種對象的缺點在於必須在包中定義;而現在用ys_refCursor類型,可以直接使用。
子程式可以獨立編譯並儲存在Oracle資料庫。使用CREATE語句顯式建立的子程式就是一個"儲存"子程式。一旦編譯並儲存到資料詞典中,它就成了一個模式對象(schema object),可以被許多連到資料庫的應用程式調用。
定義在包內的儲存子程式稱為打包子程式(packaged subprogram);單獨定義的儲存子程式稱為獨立子程式(standalone subprogram);而在另外一個子程式或PL/SQL塊內定義的儲存子程式稱為本地子程式,這樣的子程式不能被其他應用程式調用,只供本地使用。
oracle——基礎知識(二)