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);