procere proc_test(
in_id in varchar2,
out_sum out varchar2
) as
begin
execute immediate 'select count(*) from table_name '||in_id into out_sum;
end;
/
sqlplus里调用时:
var out_sum varchar2(10)
exec package_name.proc_test('where id=''XXX'' or 1=1',:out_sum)
print out_sum
Ⅱ 求助一个oracle中sql语句动态拼接的问题
MSSQL到ORACLE还是有不小的差距。
如果在MSSQL里,可以这样:
declare @sql nvarchar(max);
declare @tableName nvarchar(100);
set @sql = 'OPEN PCURSOR FOR
SELECT T.ID as OBJECTID,T.SHAPE.GET_WKT() as COORD
FROM ' + @tableName + ' T
WHERE instr(@OBJIDS,'',''||TO_CHAR(ID)||'','')>0';
sp_execute @sql, @OBJIDS=OBJIDS
(没用Sql验证,单词拼写可能有错误,语法也可能有错误)
Ⅲ oracle sql字段值拼接问题
SELECT LPAD(CLO_NAME,LENGTH(CLO_NAME)+CLO_NUM) FROM TABLE_NAME
Ⅳ oracle 存储过程执行动态sql实例
oracle的动态sql是指在语句块使用execute immediate 执行sql语句,sql语句可以使用存储过程传的参数进行拼接,本文针对varchar2和number两种类型的参数类型,进行sql拼接并执行。
功能:输入日期区间,销售数量满足上限和下限的产品id
1.正常传值
输出结果
2.若果number类型的参数传空,会报ora-00936:缺失表达式,可以在存储过程中增加对参数null值的判断
oracle 动态拼接传入参数,varchar2类型可以使用'''|| IN_START_DTIME || ''' ,number类型可以使用'||IN_DOWN_LIMIT||' ; 拼接的过程需要注意校验参数的合法性,增加存储过程的容错性。临时表使用了会话级,存储过程执行完,可以通过查询存储过程获取结果。
Ⅳ oracle 在PLSQL脚本中如何表名称与数字字符串拼接
使用plsql存储过程制造一个脚本如:
create or replace procere test_val
(etl_date varchar2, --时间或者数字变量
data out sys_refcursor ---存放数据
) as
s_sql varchar2(1000); --执行sql
begin
s_sql := 'SELECT A,B FROM tsalpludetail' || etl_date ;
--dbms_output.put_line(s_sql);----打印sql可以不需要
open data for s_sql; ---把结果集放入data
end test_val;
执行后,打开存储过程
至此完成
Ⅵ oracle中sql语句如何动态拼接
因为'x'||to_char(sysdate,'dd')=‘xxxx’这个条件不满足,所以查询不到数据。
'x'||to_char(sysdate,'dd')明显不等于'xxxx',能查询到数据就是怪事了。
如果你想查询到数据,必须保证'x'||to_char(sysdate,'dd')的值等于'xxxx'
就拿今天来说'x'||to_char(sysdate,'dd')的值肯定是x24。
'xxxx'的值是为xxxx,不等于x24。肯定查询不到数据。
你这个语句就跟
select name from A where 1>2这个语句的效果一样。
如果你的xxxx表示你表中的一个字段,比如X1,X2..X31,
如:
select name from A where 'x'||to_char(sysdate,'dd')=x24;
你做关联的是用你的字段名,但是判断取值的是时候,却是取的x24这一列里面的值。
如果x24这一列里面有一列的值是x24,肯定查得出数据,如果没有,肯定就查不出来,
你先确实有没得x24这条数据记录了来。。
Ⅶ oracle 求sql拼接方式
oracle中只有这样的拼接了,除非你想用concat。不过此处concat肯定不适合你。
到到效果就可以了,而且性能还不差,何必一定要用append呢。
declare
avarchar2(100);
bvarchar2(100);
cvarchar2(100);
strvarchar2(32767);
inumber;
begin
str:='';
a:='aa';
b:='bb';
c:='cc';
loop
i=i+1;
ifi=1then
str:=a||b;
else
str:=str||c;
endif;
exitwheni=100;
endloop;
dbms_output.put_line(str);
end;