动态SQL语句oracle,Oracle动态SQL语句

动态SQL返回游标:

create or replace procedure proc_ValidityDueQuery(

p_regioncode in number,

p_pscode in number,

p_outputcode in number,

p_pollutantType in number,

p_psclasscode in varchar2,

p_attencode in varchar2,

p_checkstatus in number,

p_auditstatus in number,

p_cursor out curdata

)

as

begin

open p_cursor for

'select bs.regioncode,

bs.regionname,

bs.pscode,

bs.psname,

bs.outputcode,

bs.outputname,

bs.ptype,

bd.chkname,

bd.approvename,

bd.pollutantname,

case when ((bd.maxvalidtill - sysdate) > 0 and (bd.maxvalidtill - sysdate) <= 7) then ''yellow''

when (sysdate - bd.maxvalidtill) > 0 then ''red''

end color,

case when bs.ptype = 1 then ''水'' when bs.ptype = 2 then ''气'' end pstype,

bd.auddate,

to_char(bd.maxvalidtill, ''yyyy-MM-dd HH24:mi'') validtill

from (select vb.regioncode,

vb.regionname,

vb.pscode,

vb.psname,

vo.outputcode,

vo.outputname,

vo.ptype

from (select oregioncode regioncode, oregionname regionname, pscode, psname

from v_baseinfo

where 1 = 1

'|| case when p_regioncode >0 then 'and oregioncode='|| p_regioncode else '' end ||'

'|| case when p_pscode>0 then 'and pscode='|| p_pscode else '' end ||'

'|| case when p_psclasscode<>'0' then 'and psclasscodexc in ('|| p_psclasscode ||')' else '' end ||'

'|| case when p_attencode<>'0' then 'and attentiondegreecode in ('|| p_attencode ||')' else '' end ||'

) vb,

(select pscode, outputcode, outputname, inout, psstatus, ptstatus, ptype

from v_output t

where psstatus = 0

and ismonitor = 1

and ptstatus = 0

'|| case when p_pscode>0 then 'and pscode='|| p_pscode else '' end ||'

'|| case when p_outputcode>0 then 'and outputcode='|| p_outputcode else '' end ||'

'|| case when p_checkstatus=1 then 'and isgjkh=1 or isskkh=1'

when p_checkstatus=0 then 'and isgjkh=0 or isskkh=0'

else ''

end || '

and ptype ='|| p_pollutantType ||'

'|| case when p_psclasscode<>'0' then 'and psclasscodexc in ('|| p_psclasscode ||')' else '' end ||'

'|| case when p_attencode<>'0' then 'and attentiondegreecode in ('|| p_attencode ||')' else '' end ||'

) vo

where vb.pscode = vo.pscode) bs,

(select pscode, outputcode, pollutantname, pollutantcode,

auddate,maxvalidtill, approvename, chkname

from v_scenecommonite

where checkresult=''1''

'|| case when p_pscode>0 then 'and pscode='|| p_pscode else '' end ||'

'|| case when p_outputcode>0 then 'and outputcode='|| p_outputcode else '' end ||'

'|| case when p_auditstatus=1 then 'and ((maxvalidtill - sysdate) > 0 and (maxvalidtill - sysdate) <= 7)'

when p_auditstatus=2 then 'and maxvalidtill >= sysdate⑼0'

when p_auditstatus=3 then 'and sysdate>maxvalidtill'

else ''

end ||'

) bd

Where bs.pscode=bd.pscode

and bs.outputcode=bd.outputcode

order by bd.maxvalidtill desc, bs.regioncode, bs.pscode, bs.outputcode';

end proc_ValidityDueQuery;

2.动态创建临时表

--创建临时表

--判断是不是存在

select count(*)

into v_num

from user_tables

where table_name=upper('zstemptable');

--如果不存在则创建

if v_num=0 then

execute immediate 'create global temporary table zstemptable(id number(1),reviseddata number(20,6))

on commit preserve rows';

end if;

--插入数据

execute immediate 'insert into zstemptable

select 1,RevisedStrength

from (select RevisedStrength

from t_mod_gasfachourdata

where pscode = '|| p_pscode ||'

and outputcode = '|| p_outputcode ||'

and pollutantCode = '''|| p_pollutantcode ||'''

and monitorTime < to_date('''|| p_recordTime ||''',''yyyy-MM-dd HH24:mi:ss'')

and availableStatus = 0

order by MonitorTime desc)

where rownum = 1';

--查询数据

execute immediate 'select count(*) from zstemptable where id=1' into v_hisstrength;

--清除表信息

execute immediate 'truncate table zstemptable';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 例: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL 错误: declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 正确: Exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 --注:@s参数必须为ntext或nchar或nvarchar类型,必须将declare @s varchar(1000) 改为declare @s Nvarchar(1000) 如下: declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @fname = 'FiledName' --设置字段名 set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输入或输出参数 (1)输入参数: declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型) declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型) declare @input_id int--定义需传入动态语句的参数的值 set @QueryString='select * from tablename where id=@id' --id为字段名,@id为要传入的参数 set @paramstring='@id int' --设置动态语句中参数的定义的字符串 set @input_id =1 --设置需传入动态语句的参数的值为1 exec sp_executesql @querystring,@paramstring,@id=@input_id   若有多个参数: declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型) declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型) declare @input_id int--定义需传入动态语句的参数的值,参数1 declare @input_name varchar(20)--定义需传入动态语句的参数的值,参数2 set @QueryString='select * from tablename where id=@id and name=@name' --id与name为字段名,@id与@name为要传入的参数 set @paramstring='@id int,@name varchar(20)' --设置动态语句中参数的定义的字符串,多个参数用","隔开 set @input_id =1 --设置需传入动态语句的参数的值为1 set @input_name='张三' --设置需传入动态语句的参数的值为"张三" exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序 (2)输出参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值