天天看點

動态SQL

1.使用動态SQL包來建立表:

declare

    v_cur binary_integer;

    v_sql varchar2(200);

begin

    --為執行動态sql語句打開一個遊标

    v_cur:=dbms_sql.open_cursor;

    v_sql:='create table mytest_zhanghb(id number(5) primary key,name varchar2(10))';

    --解析動态sql語句:

    --參數1:打開遊标

    --參數2:執行的sql語句

    --參數3:oracle資料庫類型版本,native表示使用本地資料庫的版本

    dbms_sql.parse(v_cur,v_sql,dbms_sql.native);

    --關閉遊标

    dbms_sql.close_cursor(v_cur);

end;

/

注意:在匿名語句塊中調用procedure,如果此過程中使用了DDL語句,那麼該使用者必須直接賦予權限.

oracle使用者的權限:

create user jd0712 identified by jd0712.

grant connect,resource to jd0712;

grant create table to jd0712;

2.使用動态SQL包來查詢資料庫的記錄

create or replace procedure pro_select_zhanghb(v_table varchar2,v_num number)

is

    v_result binary_integer;

    v_id    number(5);

    v_name    varchar2(10);

    v_sql    varchar2(200);

    --打開遊标

    v_sql:='select id,name from '||v_table||' where rownum<'||v_num;

    --解析動态sql

    --指定取出資料的類型和限制

    --指定取出資料的類型,必須用變量表示(注意:字元串類型要指定限制)

    dbms_sql.define_column(v_cur,1,v_id);

    dbms_sql.define_column(v_cur,2,v_name,10);

    --執行sql

    v_result:=dbms_sql.execute(v_cur);

    --擷取資料

    while dbms_sql.fetch_rows(v_cur)>0 loop

        --定義變量存放取出的資料

        dbms_sql.column_value(v_cur,1,v_id);

        dbms_sql.column_value(v_cur,2,v_name);

        dbms_output.put_line('id:'||v_id||' name:'||v_name);

    end loop;

    --關閉遊标

    dbms_sql.close_cursor(v_cur);

    pro_select_zhanghb('tbl_zhanghb',5);

3.使用動态SQL包插入資料

create or replace procedure pro_insert_zhanghb(v_talbe varchar2,v_id number,v_name varchar2)

    v_cur    binary_integer;

    v_result    binary_integer;

    v_sql    varchar2(200);

    --打開遊标

    v_cur:=dbms_sql.open_cursor;

    v_sql:='insert into '||v_talbe||' values(:id,:name)';

    --解析動态sql語句

    dbms_sql.parse(v_cur,v_sql,dbms_sql.native);

    --綁定變量

    dbms_sql.bind_variable(v_cur,':id',v_id);

    dbms_sql.bind_variable(v_cur,':name',v_name);

    --執行動态sql

    v_result:=dbms_sql.execute(v_cur);

    commit;

    pro_insert_zhanghb('tbl_zhanghb',589,'seaside');

4.定時調用

--定時調用,一共四個參數,1,腳本号,2、操作(varchar)3、系統時間(date),4、每隔x時間執行一次(varchar)

create table job(s_date date);

    code number;

        DBMS_JOB.SUBMIT(code,'insert into job values(sysdate);',SYSDATE,'SYSDATE+1/(24*60)');

--查詢腳本号,在資料字典中查詢

USER_JOBS;

select JOB,what from USER_JOBS;

--删除腳本

DBMS_JOB.REMOVE(21);

上一篇: 動态SQL