需求: 儲存過程完成一年建立乙個表
實現**如下:
create or replace
procedure test123456 as
suffix_year varchar(5);
tablename varchar(40);
begin
select to_char(sysdate,'yyyy') into suffix_year from dual;
tablename:='test'||suffix_year;
dbms_output.put_line(suffix_year);
create table tablename||'123' as select * from test
t where 1=2;
-- exception
-- when no_data_found then dbms_output.put_line('異常');
end;
上面的方法一直編譯不過去,因為我的表名稱是乙個變數,後來通過查閱各種資料了解到 可以用execute immediate 來實現!
新實現**如下:
create or replace
procedure test123456 as
suffix_year varchar(5);
tablename varchar(40);
begin
select to_char(sysdate,'yyyy') into suffix_year from dual;
tablename:='test'||suffix_year;
dbms_output.put_line(suffix_year);
--create table tablename||'123' as select * from zp_scan_order t where 1=2;
execute immediate 'create table '||tablename || ' as select * from zp_scan_order t where 1=2 ';
-- exception
-- when no_data_found then dbms_output.put_line('異常');
end;
上面方法編譯算是成功了,但是在執行的時候發現 執行錯誤,提示是許可權不足,然而我們把execute immediate 'create table '||tablename || ' as select * from zp_scan_order t where 1=2 ';
直接在plsql中執行是沒有問題的!
這個問題怎麼解決呢?
既然提示許可權不足,那我就賦值許可權給當前使用者user1,以sys使用者登入 執行如下sql:
grant create any table to user1
再次執行儲存過程,沒有問題,成功!
Oracle 建立表,儲存過程
1.首先建立乙個customer 表 create table customer customerid varchar2 10 primary key,customername varchar2 20 custoemr varchar2 8 custoemrage int 2.插入四行資料 inse...
oracle儲存過程 建立儲存過程語句
一 建立儲存過程語句 語法 create or replace procedure testname argument1 type1,as begin end testname 例子 create orreplace procedure test name arg1 varchar2,arg2 nu...
儲存過程建立表
create or replace procedure test1 tname varchar2 is v createsql varchar2 400 v dropsql varchar2 100 v count number 9 begin v createsql create table tn...