對於一般的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;
例一:create table test(n_id number, v_name varchar2(50), d_insert_date date);
alter table test add constraint pk_id primary key(n_id);
declare
v_cursor number;
v_sql varchar2(200);
v_id number;
v_name varchar2(50);
v_date date;
v_stat number;
begin
v_id := 1;
v_name := '測試 insert';
v_date := sysdate;
v_cursor := dbms_sql.open_cursor; --開啟游標
v_sql := 'insert into test(n_id, v_name, d_insert_date) values(:v_id,:v_name,:v_date)';
dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析sql
dbms_sql.bind_variable(v_cursor, ':v_id', v_id); --繫結變數
dbms_sql.bind_variable(v_cursor, ':v_name', v_name);
dbms_sql.bind_variable(v_cursor, ':v_date', v_date);
v_stat := dbms_sql.execute(v_cursor); --執行
dbms_sql.close_cursor(v_cursor); --關閉游標
commit;
end;
例二:declare
v_cursor number;
v_sql varchar2(200);
v_id number;
v_name varchar2(50);
v_stat number;
begin
v_name := '測試 update';
v_id := 1;
v_cursor := dbms_sql.open_cursor;
v_sql := 'update test set v_name = :v_name, d_insert_date = :v_date where n_id = :v_id';
dbms_sql.parse(v_cursor, v_sql, dbms_sql.native);
dbms_sql.bind_variable(v_cursor, ':v_name', v_name);
dbms_sql.bind_variable(v_cursor, ':v_date', sysdate);
dbms_sql.bind_variable(v_cursor, ':v_id', v_id);
v_stat := dbms_sql.execute(v_cursor);
dbms_sql.close_cursor(v_cursor);
commit;
end;
例三:declare
v_cursor number;
v_sql varchar2(200);
v_id number;
v_stat number;
begin
v_id := 1;
v_sql := 'delete from test where n_id = :v_id';
v_cursor := dbms_sql.open_cursor;
dbms_sql.parse(v_cursor, v_sql, dbms_sql.native);
dbms_sql.bind_variable(v_cursor, ':v_id', v_id);
v_stat := dbms_sql.execute(v_cursor);
dbms_sql.close_cursor(v_cursor);
commit;
end;
例四:declare
v_cursor number;
v_sql varchar2(200);
v_id number;
v_name varchar2(50);
v_date varchar2(10);
v_stat number;
begin
v_sql := 'select n_id, v_name, to_char(d_insert_date, ''yyyy-mm-dd'') from test';
v_cursor := dbms_sql.open_cursor; --開啟游標
dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析游標
dbms_sql.define_column(v_cursor, 1, v_id); --定義列
dbms_sql.define_column(v_cursor, 2, v_name, 50); --注意:當變數為varchar2型別時,要加長度
dbms_sql.define_column(v_cursor, 3, v_date, 10);
v_stat := dbms_sql.execute(v_cursor); --執行sql
loop
exit when dbms_sql.fetch_rows(v_cursor) <= 0; --fetch_rows在結果集中移動游標,如果未抵達末尾,返回1。
dbms_sql.column_value(v_cursor, 1, v_id); --將當前行的查詢結果寫入上面定義的列中。
dbms_sql.column_value(v_cursor, 2, v_name);
dbms_sql.column_value(v_cursor, 3, v_date);
dbms_output.put_line(v_id || ':' || v_name || ':' || v_date);
end loop;
end;
dbms sql包的用法
原博 對於一般的select操作,如果使用動態的sql語句則需要進行以下幾個步驟 open cursor parse define column excute fetch rows close cursor 而對於dml操作 insert,update 則需要進行以下幾個步驟 open cursor...
dbms sql包的用法
open cursor parse execute close cursor 例一 create table test n id number,v name varchar2 50 d insert date date alter table test add constraint pk id pr...
oracle中dbms sql的使用
一 使用dbms sql執行查詢 利用dbms sql執行select語句,其順序為 open cursor parse define column execute fetch rows close cursor 1 建立班組表結構,如下圖所示 proteamid 主鍵id proteamname ...