oracle存儲過程中創建表
A. 請問用oracle的存儲過程如何創建一個表創建前判斷此表名是否已存在,已存在則不創建
說下思路吧
就是過程定義個字元串變數 createtable
然後再給變數賦值
createtable:='create table table_name()";
大概就這樣
判斷的話你寫個if語句就行
補充:
另一位說的不錯
你可以使用all_tables。注意你的表名要大寫。因為oracle里的數據字典存儲的數據是區分大小寫的。可以查詢出是否存在你要創建的表。
B. oracle 怎麼在存儲過程中創建一個臨時表,在裡面插入數據,再查找這個臨時表的所有數據,最後drop這個表。
Oracle
的臨時表的
處理機制,
和
sql
Server
的不一樣。
假如你的臨時表的結構不是每次執行都發生變化的話
那麼就是事先
通過
CREATE
GLOBAL
TEMPORARY
TABLE
語句,把臨時表建立好。
存儲過程裡面,就根據需要,
執行
INSERT
/
SELECT
之類的操作就可以了
C. ORACLE存儲過程創建臨時表並插入數據。
你這個語法是不對的
你create
table
as
select
的時候是不能指定列的數據類型,因為你是根據查詢結果創建一個表,列名和數據類型都是由查詢結果定的,或者你可以
create
table
然後
insert
into
table
select
...
改成下面這樣
create
or
replace
procere
test_proc
as
begin
execute
immediate
'
create
global
temporary
table
T_AB
as
select
A.id_,
A.name_,
B.num_
from
T_A
A,
T_B
B
where
A.id_=B.id_';
end;
D. oracle存儲過程中建表
在存儲過程中建立表
要用 execute immediate('CREATE or replace table *****') 這樣的語句格式
ddl 語句無法在orace 的存儲過程直接執行,要用 execute immediate 來調用。
E. oracle 在存儲過程中動態的建一個臨時表使用和在資料庫里寫死一個臨時表使用兩者有什麼區別
我們仍使用實驗 05中的環境,略去准備數據的過程。
我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:
主會話線程號為 29,
可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。
也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。
結論:
我們可以看到,
1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲。
2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。
3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。
F. ORACLE存儲過程創建臨時表並插入數據。
存儲過程創建表後,在編譯階段資料庫中並沒有該表。這時向表中插入數據,會提示表不存在。所以,插入語句要賦值到變數里,通過e來執行。
G. ORACLE存儲過程中,可以動態創建表么
需要用到動態sql。
1、首先要給用戶賦予許可權:
grant create any table to 用戶名;
2、創建存儲過程:
create procere p_create_table
(v_sql varchar2)--輸入建表語句
as
begin
execute immediate v_sql;
end;
3、執行:
H. oracle存儲過程創建表
CREATE OR REPLACE PROCEDURE list_xs_name as
str_sql varchar2(2000);
begin
str_sql := 'create global temporary table xs_name (xh int,name varchar2(255),kc varchar2(255),fs int) on commit preserve rows';
execute immediate str_sql;
str_sql := 'select * from xs_name';
execute immediate str_sql;
dbms_output.put_line(str_sql);
END;