oracle 儲存過程 建立表

2021-07-25 02:47:59 字數 1678 閱讀 8981

需求: 儲存過程完成一年建立乙個表
實現**如下:
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...