當前位置:首頁 » 存儲配置 » oracle存儲過程創建表

oracle存儲過程創建表

發布時間: 2022-04-23 09:53:52

『壹』 如何在Oracle的存儲過程中建表啊

可以在存儲過程中使用execute immediate 'sql';子句來創建表,例如Execute Immediate 'create table test(id int)';

『貳』 oracle 存儲過程建表

這個過程就行了。。
create or replace procere wym
authid current_user
is
vn_ctn number(2);
begin
select count(*) into vn_ctn from user_all_tables a where a.table_name like upper('invbasdoc');
if vn_ctn > 0 then
execute immediate 'drop table invbasdoc';
end if;
execute immediate 'create table invbasdoc as select * from test_abcd';
end ;

原來的過程中:execute immediate 'drop table invbasdoc'; 當如果資料庫中不存在這張表的時候就會報錯的。。
上面是對資料庫中是否存在表進行了判斷,因此能夠避免「表不存在」這樣的錯誤。。

『叄』 想用oracle的存儲過程動態建表

建立序列:
create sequence t_id
increment by 1
start with 1
nomaxvalue
cache 20;
建立自動建表過程:
create or replace procere pro_createtable(tname in varchar2 default to_char(sysdate,'yyyymm'))
as
v_sql varchar2(200);
v_tname varchar2(10);
begin
if length(tname)<>6 then
raise_application_error(-20000,'輸入參數長度不夠,不能轉換為日期格式!');
end if ;
if to_number(substr(tname,5,2)) not between 1 and 12 then
raise_application_error(-20001,'輸入參數中不包含有效的月份數字,不能轉換為日期格式!');
end if ;
--v_tname:=to_char(to_date(tname,'yyyymm'),'yyyymm');
v_tname:='hd_'||tname;
v_sql:='create table '||v_tname||' ('||
'id number not null,'||
'name varchar2(20),'||
'city varchar2(20))'||
'tablespace users';
execute immediate v_sql;
end;
測試:
begin
pro_createtable;
pro_createtable('201106');
pro_createtable('201115');--報錯
end;

『肆』 oracle存儲過程中建表

首先根據需求,想好需要建哪些欄位,哪些是主鍵,建在哪個表空間下,另外欄位類型也要考慮好,因為一旦建成表往裡面插入數據後,欄位類型就不容易更改了
表建成之後,如果數據量很大,應該考慮建立針對某欄位的索引。

『伍』 oracle 怎麼在存儲過程中創建一個臨時表,在裡面插入數據,再查找這個臨時表的所有數據,最後drop這個表。

Oracle
的臨時表的
處理機制,

SQL
Server
的不一樣。
假如你的臨時表的結構不是每次執行都發生變化的話
那麼就是事先
通過
CREATE
GLOBAL
TEMPORARY
TABLE
語句,把臨時表建立好。
存儲過程裡面,就根據需要,
執行
INSERT
/
SELECT
之類的操作就可以了

『陸』 oracle如何用存儲過程建表

說的不明白
1.建什麼樣的表?
2.欄位是怎麼樣的變數?
3.表內的數據怎麼來?僅僅是一個表嗎?

參數是怎麼來的?輸入的參數還是按照日期來的?
變數名是怎麼來的?手動輸入的欄位名參數還是怎麼?
我看你就把你想做什麼說出來,你這樣沒法弄
----------------------------------------------------------------------
PROCEDURE SP_CREATE_new_table
(
on_flag OUT NUMBER,
out_reason OUT VARCHAR2
)
is
v_sql1 varchar2(2000);
v_a varchar2(1);
v_b varchar2(1);
v_c varchar2(1);

begin

select 'a' into v_a from al;
select 'b','c' into v_b,v_c from al;

v_sql1 :='create table '||v_a||'('||v_b||' varchar2(1),'||v_c||' varchar2(1))';
EXECUTE IMMEDIATE v_sql1;

commit;

EXCEPTION
WHEN OTHERS
THEN
on_flag := SQLCODE;
out_reason := SUBSTR (SQLERRM, 1, 255);
ROLLBACK;
END;

有什麼看不懂的就問吧
運行後,執行select * from a;
表名就叫a,欄位名叫b和c,都是按你說的

『柒』 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、執行:

『捌』 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。

『玖』 ORACLE存儲過程創建臨時表並插入數據。

存儲過程創建表後,在編譯階段資料庫中並沒有該表。這時向表中插入數據,會提示表不存在。所以,插入語句要賦值到變數里,通過e來執行。

『拾』 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;

熱點內容
反編譯redis里的數據 發布:2024-11-19 07:31:59 瀏覽:857
android音樂播放器的實現 發布:2024-11-19 07:12:44 瀏覽:968
傳奇世界手游打架腳本 發布:2024-11-19 07:05:43 瀏覽:679
小白電腦一般什麼配置 發布:2024-11-19 06:50:19 瀏覽:386
阿里的編程測驗 發布:2024-11-19 06:50:10 瀏覽:43
資料庫優化教程 發布:2024-11-19 06:49:12 瀏覽:592
android打開activity 發布:2024-11-19 06:41:36 瀏覽:78
sql表的操作 發布:2024-11-19 06:36:27 瀏覽:138
安卓手機用什麼模擬器 發布:2024-11-19 06:36:27 瀏覽:859
es文件夾就 發布:2024-11-19 06:27:13 瀏覽:541