我想把'A1', 'C1', 'D1'作为参数传给PLSQL函数,然后放到IN语句里面,但是好像没有数据,我试过两种方法:
方法0, 直接传递 '(''' || 'A1' || ''', ''' || 'D1' || ''')' 给函数;
select f1( '(''' || 'A1' || ''', ''' || 'D1' || ''')') from dual
結果就是没结果方法1,传递'A1, C1, D1',我再在函數中分隔字符串,拼成IN的条件,还是不行;我还拼接成了SELECT UNION的形式,还是不行。注意我在函數里面拼接好的条件表达式,经过测试,样子就是一个正确的调教表达式语句的思路是没有问题的,最后面我给出了能够找到结果的语句,函数里面用的也是这个语句,只不过我想把SELECT子句的条件表达式用参数传递进行,请问如何解决,谢谢。以下两句话可以正常执行,已测试: SELECT DOT_NET_NAME
FROM SYS_FILE_ACCESS_LEVEL
WHERE LEVEL_ID = (SELECT MAX(LEVEL_ID)
FROM SYS_FILE_ROLE_LEVEL
WHERE FILE_ID = 2
AND ROLE_CODE IN ('A1', 'C1', 'D1')
); SELECT DOT_NET_NAME
FROM SYS_FILE_ACCESS_LEVEL
WHERE LEVEL_ID = (SELECT MAX(LEVEL_ID)
FROM SYS_FILE_ROLE_LEVEL
WHERE FILE_ID = 2
AND ROLE_CODE IN (SELECT 'A1' FROM DUAL UNION ALL
SELECT 'D1' FROM DUAL UNION ALL
SELECT 'C1' FROM DUAL)
);
方法0, 直接传递 '(''' || 'A1' || ''', ''' || 'D1' || ''')' 给函数;
select f1( '(''' || 'A1' || ''', ''' || 'D1' || ''')') from dual
結果就是没结果方法1,传递'A1, C1, D1',我再在函數中分隔字符串,拼成IN的条件,还是不行;我还拼接成了SELECT UNION的形式,还是不行。注意我在函數里面拼接好的条件表达式,经过测试,样子就是一个正确的调教表达式语句的思路是没有问题的,最后面我给出了能够找到结果的语句,函数里面用的也是这个语句,只不过我想把SELECT子句的条件表达式用参数传递进行,请问如何解决,谢谢。以下两句话可以正常执行,已测试: SELECT DOT_NET_NAME
FROM SYS_FILE_ACCESS_LEVEL
WHERE LEVEL_ID = (SELECT MAX(LEVEL_ID)
FROM SYS_FILE_ROLE_LEVEL
WHERE FILE_ID = 2
AND ROLE_CODE IN ('A1', 'C1', 'D1')
); SELECT DOT_NET_NAME
FROM SYS_FILE_ACCESS_LEVEL
WHERE LEVEL_ID = (SELECT MAX(LEVEL_ID)
FROM SYS_FILE_ROLE_LEVEL
WHERE FILE_ID = 2
AND ROLE_CODE IN (SELECT 'A1' FROM DUAL UNION ALL
SELECT 'D1' FROM DUAL UNION ALL
SELECT 'C1' FROM DUAL)
);
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (N1 int,N2 varchar(4),N3 int,N4 varchar(4))
insert into #TB
select 12,'茶碗',4,'李四' union all
select 15,'水缸',4,'李四' union all
select 8,'锅',4,'李四' union all
select 53,'锅2',5,'王1'
DECLARE @S VARCHAR(50)
SET @S='''水缸'',''锅''' set @s='select * from #TB where n2 in ('+@s+')'
--print @s exec(@s)N1 N2 N3 N4
----------- ---- ----------- ----
15 水缸 4 李四
8 锅 4 李四(2 行受影响)
ms sql 的,不知道oracle 的动态是不是类似的