function coltostr(p_tabname varchar2,p_colname VARCHAR2,p_colwhere VARCHAR2,p_where VARCHAR2)
return VARCHAR2
is
v_result VARCHAR2(8000):='';
v_strwhere VARCHAR(6000);
BEGIN
v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname||' WHERE '||p_colwhere||' =''' ||p_where||''' ';
---v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname;
IF(p_colwhere='1') THEN
v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname;
END IF; EXECUTE IMMEDIATE '
DECLARE v_pcol VARCHAR2(8000):='''';
BEGIN
FOR i IN ('||v_strwhere||') LOOP
v_pcol:= v_pcol || i.'||p_colname||' || '','';
END LOOP;
select v_pcol into :1 from dual;
END;
' USING OUT v_result;
RETURN substr(v_result,1,length(v_result)-1);
END;
这是包里面的一个函数,请教一下动态调用在包或存贮过程中引号的使用方法 例如:v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname||' WHERE '||p_colwhere||' =''',
引号的使用规则,请说的具体些,谢谢。
return VARCHAR2
is
v_result VARCHAR2(8000):='';
v_strwhere VARCHAR(6000);
BEGIN
v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname||' WHERE '||p_colwhere||' =''' ||p_where||''' ';
---v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname;
IF(p_colwhere='1') THEN
v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname;
END IF; EXECUTE IMMEDIATE '
DECLARE v_pcol VARCHAR2(8000):='''';
BEGIN
FOR i IN ('||v_strwhere||') LOOP
v_pcol:= v_pcol || i.'||p_colname||' || '','';
END LOOP;
select v_pcol into :1 from dual;
END;
' USING OUT v_result;
RETURN substr(v_result,1,length(v_result)-1);
END;
这是包里面的一个函数,请教一下动态调用在包或存贮过程中引号的使用方法 例如:v_strwhere:= 'SELECT '||p_colname||' FROM '||p_tabname||' WHERE '||p_colwhere||' =''',
引号的使用规则,请说的具体些,谢谢。
|| 是连接符,其余的是变量,引号''是一个',具体你可以试试
这是因为那个字段是字符型,普通的SQL里面就必须带上引号,比如:
select * from ttt where sss='abc'
转成变量形式你变成这样了:
v_str='select * from ttt where sss=''abc''';就是说在单引号之间的两个单引号实际上是一个单引号。同样的,在你的例子中,在组装SQL时需要在p_where两头加上单引号,需要用两个单引号来表示。实际上你的那个v_strwhere变量中并没有双引号,都是单引号,你可以复制到其他编辑器中看看,比如ultredit看看16进制编码就知道。
'' ||p_where||''这个不是双引号,是俩个单引号。俩个单引号表示普通语句中的一个单引号。