我想把'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)
      );

解决方案 »

  1.   

    --> 测试数据: #TB
    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 的动态是不是类似的
      

  2.   

    select * from #TB where n2 in(@s)单独这样执行时没有结果的