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

存儲過程表

發布時間: 2023-04-28 05:13:31

1. mysql存儲過程操作表

1. select nameid,case value when 4 then count(*) else 0 end as value1,case value when 3 then count(*) else 0 end as value2 into 新表 from 表 group by nameid,value

2. create proc dbo.名儲過程名稱 As
create table 新表(nameid int,value1 int,value12 int)
insert into 新表(nameid,value1,value12)
select nameid,case bi when 1 then sum(value) else 0 end,case bi when 0 then sum(value) else 0 end from 表 group by nameid

2. 如何在Oracle的存儲過程中建表啊

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

3. 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;

4. 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'; 當如果資料庫中不存在這張表的時候就會報錯的。。
上面是對資料庫中是否存在表進行了判斷,因此能夠避免「表不存在」這樣的錯誤。。

5. ADO或odbc如何創建存儲過程和表

【delphi+oracle報表解決方案(一)】delphi中調用oracle的存儲過程(分帶返回遊標,不返回值兩種)
關鍵字: delphi ,oracle存儲過程,游標,返回數據集,報表註:delphi 6+ oracle 8.1.6一.創建包與包體1.附:建表aaclass為下面作測試用create table aaclass(CID VARCHAR2(50), CNAME VARCHAR2(50), pnumber NUMBER(10,0) );INSERT INTO aaclass values('c1', 'cn1', 10 ) ;
INSERT INTO aaclass values('c2', 'cn2', 40 ) ;
INSERT INTO aaclass values('c1', 'cn3', 30 ) ;
commit;2.建包:CREATE OR REPLACE PACKAGE PKG_JCCTEST1
AS type rc_class is ref cursor;
--求p1,p2的和與差,返回的多個值通過游標返回
procere GetSubAndSum2(p1 number,p2 number ,
ResultCursor out rc_class);

--查詢滿足條件的數據集,返回數據集通過游標返回
procere GetClass2(a in number,ResultCursor out rc_class ) ; --往表中插一條記錄,不返回結果集時,本人用AdoQuery調用(adodataset好象要求必須返回結果集)
procere InsertClass( p_cid varchar2 ,p_cname varchar2 ,
p_pnumber number) ;
end PKG_JCCTEST1; 3.建包體CREATE OR REPLACE PACKAGE BODY PKG_JCCTEST1
ASprocere GetSubAndSum2(p1 number,p2 number ,
ResultCursor out rc_class)
IS
BEGIN
open ResultCursor for
select p1-p2 as "sum", p1+p2 as "sub" from al;
END ;
procere GetClass2(a in number,ResultCursor out rc_class )
is
begin open ResultCursor for
select aaclass.* from aaclass where pnumber >a;end ;procere InsertClass( p_cid varchar2 ,p_cname varchar2 ,
p_pnumber number)
is
begin
insert into aaclass values(p_cid,p_cname,p_pnumber) ;
-- commit;
end ; 二.在delphi中利用AdoDataSet調用上述第一個存儲過程
1.利用AdoConnection1連接資料庫(驅動為 oracle Provider for OLE DB),
**並在連接字元串中加入這一節: PLSQLRSet=1; 如下所示:
Provider=OraOLEDB.Oracle.1;Password=KXD;Persist Security Info=True;User ID=KXD;Data Source=TEST3;PLSQLRSet=12.在窗體上加AdoDataSet1 指明連接為上述AdoConnection1,下面可以放一個按鈕,單擊按鈕就能調用第一步中創建的包過程,並返回數據集。代碼如下所示:
procere TForm1.Button1Click(Sender: TObject);
var
AResult , BResult : integer;
begin
ADODataSet1.Close ;
ADODataSet1.CommandType := cmdText ;
ADODataSet1.Parameters.Clear ; //***利用call方法調用oracle過程時,參數必須由?來傳, 即使你要傳的參數為常理
//輸出遊標的參數不需要指定!!!!!!,本來此函數帶三個參數,我們這里只需要傳兩個參數.
ADODataSet1.CommandText := '{call PKG_JCCTEST1.GetSubAndSum2(?,?)}' ; //***C 順序有關,createparam必須放在commandtext賦值語句之後. // 創建第一個參數,對應call中的第一個?,ftinteger為類型,10為長度,45為傳入的實參值
ADODataSet1.Parameters.CreateParameter('p1',ftinteger,pdinput,10,45);
//創建第二個參數,根據createparameter的順序 自動與call中的第二個參數對應
ADODataSet1.Parameters.CreateParameter('p2',ftinteger,pdinput,10,4); //下面調用ADODataSet1 的open方法,返回數據集(對應包過程的游標)
ADODataSet1.Open ; //根據存儲過程,數據集只有一條記錄,所以不需要用while do 來遍歷數據集,直接取數據了 //此處的欄位名根據包過程中的返回遊標 對應的欄位名來取
//定義的存儲過程返回遊標如: open ResultCursor for
// select p1-p2 as "sum", p1+p2 as "sub" from al;
//把對應的欄位值取出來即可
AResult := ADODataSet1.Fields.FieldByName('sub').Value ;
BResult := ADODataSet1.Fields.FieldByName('sum').Value ; //顯示結果
showmessage(inttostr(AResult)) ;
showmessage(inttostr(BResult)) ;end;
三.在delphi中利用AdoDataSet調用上述第二個存儲過程
還是利用上述的AdoDataSet1來調用第二個存儲過程,無需任何改動,加第二個按鈕,單擊時代碼如下:procere TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Close ;
ADODataSet1.CommandType := cmdText ;
ADODataSet1.Parameters.Clear ; //***利用call方法調用oracle過程時,參數必須由?來傳, 即使你要傳的參數為常理
//輸出遊標的參數不需要指定!!!!!!,本來此函數帶兩個參數,我們這里只需要傳一個參數.
ADODataSet1.CommandText := '{call PKG_JCCTEST1.GetClass2(?)}' ; //***C 順序有關,createparam必須放在commandtext賦值語句之後. // 創建第一個參數,對應call中的第一個?,ftinteger為類型,10為長度,20為傳入的實參值
ADODataSet1.Parameters.CreateParameter('p1',ftinteger,pdinput,10,20);
//下面調用ADODataSet1 的open方法,返回數據集(對應包過程的游標)
ADODataSet1.Open ; while not ADODataSet1.Eof do
begin
showmessage('CID : '+string(ADODataSet1.FieldByName('CID').Value) +
'--CNAME :' + string(ADODataSet1.FieldByName('CNAME').Value) +
'--PNUMBER :' + string(ADODataSet1.FieldByName('PNUMBER').Value)
) ;
ADODataSet1.Next ;
end ;
end; 四 利用adoquery調用第三個過程,不返回數據集的procere TForm1.Button3Click(Sender: TObject);
begin
AdoQuery1.Close ;
AdoQuery1.Parameters.Clear ; AdoQuery1.SQL.Clear ; AdoQuery1.SQL.Add('{call PKG_JCCTEST1.GetSubAndSum2(?,?)}') ;
AdoQuery1.Parameters.CreateParameter('P1',ftstring,pdinput, 50,'c11') ;
AdoQuery1.Parameters.CreateParameter('P2',ftstring,pdinput, 50,'cn11') ;
AdoQuery1.Parameters.CreateParameter('P3',ftinteger,pdinput, 50,25) ; AdoQuery1.ExecSQL ;
end;
五 利用adoquery調用第一個過程,返回數據集的.
procere TForm1.Button4Click(Sender: TObject);
begin
AdoQuery1.Close ;
AdoQuery1.Parameters.Clear ; AdoQuery1.SQL.Clear ; AdoQuery1.SQL.Add('{call PKG_JCCTEST1.GetSubAndSum2(?,?)}') ;
AdoQuery1.Parameters.CreateParameter('P1',ftinteger,pdinput, 50,25) ;
AdoQuery1.Parameters.CreateParameter('P2',ftinteger,pdinput, 50,22) ; AdoQuery1.Open ; Showmessage(string( AdoQuery1.FieldByName('sub').Value)+'-'+
string( AdoQuery1.FieldByName('sum').Value));
end;六.關於三層體系的此類問題兩層的解決了,三層類似.
中間層用tadodataset 或tadoquery (+tdatasetprovider),中間層的adoconnection的連接字元串加上plsqlRset=1;
客戶端用clientdataset ,大同小異,舉例如下: begin
//調用相應的過程
ClientDataSet1.Close ;
ClientDataSet1.Params.Clear ; ClientDataSet1.CommandText := '{call PackageName.ProcereName(?,?)}' ;
ClientDataSet1.Params.CreateParam(ftInteger , 'ParamName1', ptInput) ;
ClientDataSet1.Open ;

end ;

6. 關於在存儲過程中建立臨時表

你試過了嗎? 這樣建是允許的!不過這樣建的表屬於本地臨時表。當存儲過程完成時,將自動刪除在存儲過程中創建的本地臨時表。 可能是被刪了你沒看到--------CREATE PROCEDURE dbo.Test2ASCREATE TABLE #t(x INT PRIMARY KEY);INSERT INTO #t VALUES (2);SELECT Test2Col = x FROM #t;GOCREATE PROCEDURE dbo.Test1ASCREATE TABLE #t(x INT PRIMARY KEY);INSERT INTO #t VALUES (1);SELECT Test1Col = x FROM #t;EXEC Test2;GOCREATE TABLE #t(x INT PRIMARY KEY);INSERT INTO #t VALUES (99);GOEXEC Test1;GO這是個例子你可以運行了看看結果!

7. 存儲過程 表

若果你的@T 不要求做成一個物理表的話激橡可以這樣處理
create table #t(
shijian datetime,
oilqian decimal(8, 2),
oilhou decimal(8, 2),
jing decimal(8, 5),
wei decimal(8, 5)
)
set @Sql=N'insert into #t(shijian,oilqian,oilhou,jing,wei) values (''宴廳2010-01-01'明祥旁' ,1,1,1,1)'
exec (@Sql)
select * from #t

8. Sql 存儲過程創建表的問題!

把創建語句拼成字元串 存儲過程中用exec去執行創建

9. 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,都是按你說的

10. 如何使用PLSQL存儲過程建表

存儲過程里建表要用 execute immediate;
比如
create PROCEDURE test is
begin
execute immediate 'CREATE TABLE TEMP_DCY_DDM_GZ AS
SELECT AA.DEV_ID,AA.RX_POWER,AA.TX_POWER,AA.P_RX_POWER,AA.P_TX_POWER,AA.DN_ATTN,AA.UP_ATTN,AA.COLLECT_TIME,AA.達標情況
FROM (SELECT A.DEV_ID,A.RX_POWER,A.TX_POWER,A.P_RX_POWER,A.P_TX_POWER,A.DN_ATTN,A.UP_ATTN,A.COLLECT_TIME,
CASE WHEN A.RX_POWER IS NULL OR A.RX_POWER =0 then ''無光功率數據'' WHEN A.RX_POWER<-27 THEN ''不達標'' ELSE ''達標'' END 達標情況,
ROW_NUMBER() OVER(PARTITION BY A.DEV_ID ORDER BY A.COLLECT_TIME DESC) ROW_NUM
FROM IAM.T_PERF_PON_DDM@gdaniam A
WHERE EXISTS (SELECT 1 FROM IAM.T_RES_DEVICE@gdaniam B WHERE A.DEV_ID=B.DEV_ID AND B.AREA_ID=''GD-GZ'')
)AA
WHERE AA.ROW_NUM<2';
end;

熱點內容
伺服器ip轉載 發布:2025-02-12 05:19:12 瀏覽:296
oraclesql插入數據 發布:2025-02-12 05:19:05 瀏覽:918
stl源碼剖析筆記 發布:2025-02-12 05:01:51 瀏覽:589
教務系統web伺服器搭建 發布:2025-02-12 05:01:17 瀏覽:98
全國dns伺服器地址大全 發布:2025-02-12 05:01:13 瀏覽:683
安卓什麼軟體能拍到月亮 發布:2025-02-12 04:59:42 瀏覽:782
手機卡忘記服務密碼怎麼辦 發布:2025-02-12 04:59:10 瀏覽:374
如何讓助理伺服器可以被遠程 發布:2025-02-12 04:47:11 瀏覽:770
存儲空間不足但 發布:2025-02-12 04:46:27 瀏覽:278
樹莓派編程板 發布:2025-02-12 04:41:45 瀏覽:909