存儲過程createtable
① 如何在Oracle的存儲過程中建表啊
可以在存儲過程中使用execute immediate 'sql';子句來創建表,例如Execute Immediate 'create table test(id int)';
② oracle存儲過程動態建表
需要用到動態sql。
1、首先要給用戶賦予許可權:
grantcreateanytableto用戶名;
2、創建存儲過程:
createprocerep_create_table
(v_sqlvarchar2)--輸入建表語句
as
begin
executeimmediatev_sql;
end;
3、執行:
③ 存儲過程中執行create table as select from提示表或視圖不存在
你是意思是UP_DXPT_BB_ZWSR 執行報表則和或者視圖不存在 ?
那你先敗旁確認下
select
t.sort_line as VCHID,
t.sort_line as BILLIDS,
t.set_year as set_year,
t.cre_money as CRE_MONEY
from syzw.voucher_detail_budget t where t.as_code like "4%"
and t.set_year=2014
and substr(latest_op_date,1,10) >=to_char((sysdate -interval ''7'' day),''yyyy-mm-dd''察盯橡)
執行有沒有問題
④ Sql 存儲過程創建表的問題!
把創建語句拼成字元串 存儲過程中用exec去執行創建
⑤ 請問用oracle的存儲過程如何創建一個表創建前判斷此表名是否已存在,已存在則不創建
說下思路吧
就是過程定義個字元串變數 createtable
然後再給變數賦值
createtable:='create table table_name()";
大概就這樣
判斷的話你寫個if語句就行
補充:
另一位說的不錯
你可以使用all_tables。注意你的表名要大寫。因為oracle里的數據字典存儲的數據是區分大小寫的。可以查詢出是否存在你要創建的表。
⑥ 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;
⑦ 存儲過程
存儲過程(Stored Procere)是一組為了完成特定功能的SQL語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。總的來說,存儲過程具有以下一些優點:
◆存儲過程允許標准組件式編程
◆存儲過程能夠實現較快的執行速度
◆存儲過程能夠減少網路流量
◆存儲過程可被作為一種安全機制來充分利用
使用 SQL Server 中的存儲過程而不使用存儲在客戶計算機本地的 Transact-SQL 程序的優勢有:
允許模塊化程序設計。
只需創建過程一次並將其存儲在資料庫中,以後即可在程序中調用該過程任意次。存儲過程可由在資料庫編程方面有專長的人員創建,並可獨立於程序源代碼而單獨修改。
允許更快執行。
如果某操作需要大量 Transact-SQL 代碼或需重復執行,存儲過程將比 Transact-SQL 批代碼的執行要快。將在創建存儲過程時對其進行分析和優化,並可在首次執行該過程後使用該過程的內存中版本。每次運行 Transact-SQL 語句時,都要從客戶端重復發送,並且在 SQL Server 每次執行這些語句時,都要對其進行編譯和優化。
減少網路流量。
一個需要數百行 Transact-SQL 代碼的操作由一條執行過程代碼的單獨語句就可實現,而不需要在網路中發送數百行代碼。
可作為安全機制使用。
即使對於沒有直接執行存儲過程中語句的許可權的用戶,也可授予他們執行該存儲過程的許可權。
*********
Creat Table 是一個內嵌的SQL語句,是用命令的方法通過編程建立表結構。
****
如果你需要,可以將一條create table 語句作為一個存儲過程的內容。但存儲過程的內容包含更多的sql語句,可以更豐富。
⑧ mysql 在存儲過程中創建表格
DELIMITER$$
USE`test`$$
DROPPROCEDUREIFEXISTS`p_create_table`$$
CREATEDEFINER=`root`@`localhost`PROCEDURE`p_create_table`()
BEGIN
DECLAREtableNameVARCHAR(100);
DECLAREtable_nameVARCHAR(100);
DECLAREmonthIntINTDEFAULT1;
DECLAREmonthStrVARCHAR(16);
DECLAREtableHeaderVARCHAR(16);
DECLAREtableBodyVARCHAR(255);
DECLAREdropTableStrVARCHAR(255);
DECLAREsqlStrVARCHAR(1000);
SETtableName=CONCAT('test_',DATE_FORMAT(NOW(),'%Y'));
SETtableHeader='CREATETABLE';
SETtableBody='(`id`INT(11)NOTNULLAUTO_INCREMENT,`name`VARCHAR(10),PRIMARYKEY(`id`))ENGINE=INNODBDEFAULTCHARSET=utf8;';
WHILEmonthInt<=12DO
IFmonthInt<10THEN
SETmonthStr=CONCAT('0',monthInt);
ELSE
SETmonthStr=CONCAT(monthInt);
ENDIF;
SETtable_name=CONCAT(tableName,monthStr);
SETdropTableStr=CONCAT('DROPTABLEIFEXISTS',table_name);
SETsqlStr=CONCAT(tableHeader,table_name,tableBody);
SELECTdropTableStrINTO@dropTableStr;
SELECTsqlStrINTO@sqlStr;
BEGIN
PREPAREstepDropExistTableFROM@dropTableStr;
EXECUTEstepDropExistTable;
PREPAREstepCreateTbaleFROM@sqlStr;
EXECUTEstepCreateTbale;
END;
SETmonthInt=monthInt+1;
ENDWHILE;
END$$
DELIMITER;
⑨ 【50分】如何寫創建表的存儲過程
create or replace procere P_test(
start_time in varchar2,
end_time in varchar2
)
as
begin
execute immediate 'CREATE TABLE OCT_T_COMMON_SYMPTOM AS SELECT DISTINCT B.* FROM T_EHR A INNER JOIN T_COMMON_SYMPTOM B
ON A.EHR_ID=B.EHR_ID WHERE EHR_DATE between '''||start_time||''' and '''||end_time||'''';
execute immediate 'CREATE TABLE OCT_T_COMMON_DIAGNOSIS AS SELECT DISTINCT B.* FROM T_EHR A INNER JOIN T_COMMON_DIAGNOSIS B
ON A.EHR_ID=B.EHR_ID WHERE EHR_DATE between '''||start_time||''' and '''||end_time||'''';
exception
when others then
dbms_output.put_line(sqlerrm);
end;
ps:要確保你上面表的欄位EHR_DATE為varchar2類型才行,否則要作對應修改.