Oralce儲存過程中建立表

2021-08-02 12:51:00 字數 1429 閱讀 8454

需要用到動態sql。

1、首先要給使用者賦予許可權:

grant create any table to 使用者名稱;

2、建立儲存過程:

create procedure p_create_table

(v_sql varchar2)--輸入建表語句

asbegin

execute immediate v_sql;

end;

3、執行:

create

orreplace

procedure

createtable(tname 

invarchar2)  

issqltext varchar2(400);  

v_createsql varchar2(400);  

v_dropsql varchar2(100);  

v_count number(9);  

begin

sqltext := 'grant create any table to newsname'

;  --newsname為資料庫使用者名稱,這裡需要給他建立表的許可權

execute

immediate sqltext;  

v_createsql:='create table '

||tname||'(  

a  number(8) primary

key,  

b varchar2(20))';  

v_dropsql:='drop table '

||tname||

' cascade constraints'

;                  

select

count

(*) 

into

v_count 

from

user_tables 

where

table_name=

upper

(tname);  

if v_count>0 then

execute

immediate v_dropsql;  

commit

;  end

if;  

execute

immediate v_createsql;  

commit

;  end

;

就這個儲存過程來說,create table想使用create any table許可權,而create any table許可權來自dba角色,預設情況下,雖然在會話環境中可見,但在儲存過程中不可見(無效)。
所以根據上面的第一條規則,可以顯示地將create any table許可權授予cog就可以了,即

grant create any table to cog;

在ORACLE儲存過程中建立臨時表

create procedure pro asstr varchar2 100 begin str create global temporary table tablename col1 varchar2 10 col2 number on mit preserve rows execute im...

在ORACLE儲存過程中建立臨時表

create procedure pro asstr varchar2 100 begin str create global temporary table tablename col1 varchar2 10 col2 number on commit preserve rows execute...

在ORACLE儲存過程中建立臨時表

在oracle儲存過程中建立臨時表 儲存過程裡不能直接使用ddl語句,所以只能使用動態sql語句來執行 on commit delete rows 說明臨時表是事務指定,每次提交後oracle將截斷表 刪除全部行 on commit preserve rows 說明臨時表是會話指定,當中斷會話時or...