Oracle中dbms sql的使用

2021-07-05 17:06:19 字數 4366 閱讀 5248

dbms_sql包提供乙個介面,用於執行動態sql(包括ddl 和dml)。

dbms_sql定義了乙個實體叫游標id,游標id是乙個pl/sql整型數,通過游標id,可以對游標進行操作。

dbms_sql包和本地動態sql在功能上有許多重疊的地方,但是有的功能只能通過本地動態sql實現,而有些功能只能通過dbms_sql實現。

對於一般的

select操作,如果使用

動態的sql語句則需要進行以下幾個

步驟:

open 

cursor--->parse---> define 

column--->excute---> fetch 

rows--->close 

cursor;

而對於dml操作(insert,update)

則需要進行以下幾個步驟:

open 

cursor--->parse---> bind 

variable--->execute---> close 

cursor;

對於delete

操作只需要進行以下幾個步驟:

open 

cursor--->parse---> execute---> close 

cursor;

利用dbms_sql執行ddl語句:

create or replace procedure createtable2(tablename varchar2)

issql_string varchar2(1000);--存放sql語句

v_cur integer;--定義整形變數,用於存放游標

begin

sql_string := 'create table ' || tablename || '(namevarchar(20))';

v_cur := dbms_sql.open_cursor;--開啟游標

dbms_sql.parse(v_cur,sql_string,dbms_sql.native);--解析並執行sql語句

dbms_sql.close_cursor(v_cur);--關閉游標

end;

利用dbms_sql執行select語句:

open 

cursor--->parse---> define 

column--->excute---> fetch 

rows--->close 

cursor;

declare

v_cursor number;--游標id

sqlstring varchar2(200);--用於存放sql語句

v_phone_name 

varchar2(20);--手機名字

v_producer 

varchar2(20);--手機生產商

v_price  

number :=500;--手機價錢

v_count 

int;--在這裡無意義,只是存放函式返回值

begin

--:p是佔位符

--select 語句中的第1列是phone_name,第2列是producer,第3列是price

sqlstring :='selectphone_name,producer,price from phone_infor where price> :p';

v_cursor :=dbms_sql.open_cursor;--開啟游標;

dbms_sql.parse(v_cursor ,sqlstring,dbms_sql.native);--解析動態sql語句;

--繫結輸入引數,v_price的值傳給 :p

dbms_sql.bind_variable(v_cursor,':p',v_price);

--定義列,v_phone_name對應select 語句中的第1列

dbms_sql.define_column(v_cursor,1,v_phone_name,20);

--定義列,v_producer對應select語句中的第2列

dbms_sql.define_column(v_cursor,2,v_producer,20);

--定義列,v_price對應select語句中的第3列

dbms_sql.define_column(v_cursor,3,v_price);

v_count := dbms_sql.execute(v_cursor);--執行動態sql語句。

loop

--從游標中把資料檢索到快取區(buffer)中,緩衝區的值只能被函式coulumn_value()所讀取

exit whendbms_sql.fetch_rows(v_cursor)<=0;

--函式column_value()把緩衝區的列的值讀入相應變數中。

--第1列的值被讀入v_phone_name中

dbms_sql.column_value(v_cursor,1,v_phone_name);

--第2列的值被讀入v_producer中

dbms_sql.column_value(v_cursor,2,v_producer);

--第2列的值被讀入v_price中

dbms_sql.column_value(v_cursor,3,v_price);

--列印變數的值

dbms_output.put_line(v_phone_name || ' '||v_producer|| ' '||v_price);

end loop;

dbms_sql.close_cursor(v_cursor);--關閉游標

end;

利用dbms_sql執行dml語句:

open 

cursor--->parse---> bind 

variable--->execute---> close 

cursor;

declare

v_cursor number;--游標id

sqlstring varchar2(200);--用於存放sql語句

v_phone_name 

varchar2(20);--手機名字

v_producer 

varchar2(20);--手機生產商

v_price  

number :=500;--手機價錢

v_count 

int;--被dml語句影響的行數

begin

sqlstring :='

insert into phone_infor values(:a,:b,:c)';-- :a,:b,:c 是佔位符

v_phone_name  

:='s123';

v_producer  

:='索尼aa';

v_price  

:= 999;

v_cursor :=dbms_sql.open_cursor;--開啟游標;

dbms_sql.parse(v_cursor ,sqlstring,dbms_sql.native)

;--解析動態sql語句;

--繫結輸入引數,v_price的值傳給 :p

dbms_sql.bind_variable(v_cursor,':a',v_phone_name);

dbms_sql.bind_variable(v_cursor,':b',v_producer);

dbms_sql.bind_variable(v_cursor,':c',v_price);

v_count := dbms_sql.execute(v_cursor);--執行動態sql語句。

dbms_sql.close_cursor(v_cursor);--關閉游標

dbms_output.put_line(' insert ' || to_char(v_count) ||' row ');--列印有多少行被插入

commit;

end; 

oracle中dbms sql的使用

一 使用dbms sql執行查詢 利用dbms sql執行select語句,其順序為 open cursor parse define column execute fetch rows close cursor 1 建立班組表結構,如下圖所示 proteamid 主鍵id proteamname ...

Oracle應用 DBMS SQL封裝過程

dbms sql封裝過程中的主要函式 1 open cursor 返回新游標的id值 2 parse 解析要執行的語句 3 bind variable 將給定的數量與特定的變數相連線 4 define coloumn 定義字段變數,其值對應於指定游標中某個位置元素的值 僅用於select語句 5 e...

dbms sql包的用法

原博 對於一般的select操作,如果使用動態的sql語句則需要進行以下幾個步驟 open cursor parse define column excute fetch rows close cursor 而對於dml操作 insert,update 則需要進行以下幾個步驟 open cursor...