当前位置:首页 » 存储配置 » 存储过程表

存储过程表

发布时间: 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;

热点内容
我的世界创造服务器位置 发布:2025-02-12 04:24:49 浏览:701
毛利润算法 发布:2025-02-12 04:22:42 浏览:754
战舰少女r红茶脚本 发布:2025-02-12 04:05:05 浏览:465
峰火战国服务器什么时候开 发布:2025-02-12 03:56:31 浏览:175
电脑配置慢怎么解压 发布:2025-02-12 03:52:18 浏览:716
androidsdk功能 发布:2025-02-12 03:43:07 浏览:87
阿里云服务器可以访问外网吗 发布:2025-02-12 03:42:20 浏览:880
脚本的生命周期顺序 发布:2025-02-12 03:37:28 浏览:369
素数加密 发布:2025-02-12 03:37:27 浏览:803
ar源码 发布:2025-02-12 03:32:04 浏览:656