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;
请教一下'SELECT '||p_colname||' FROM '||p_tabname||' WHERE '||p_colwhere||' =''' ||p_where||''' '; 开头的第一个单引号是和语句末尾最后一个单引号的对应还是和紧接着select后面的那个单引号对应,而'SELECT '||p_colname||' FROM '||p_tabname; 这句末尾为什么没单引号?
还有这里的||是起连接作用还是其他用途,还有就是select v_pcol into :1 from dual;这句话什么意思,请指教。
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;
请教一下'SELECT '||p_colname||' FROM '||p_tabname||' WHERE '||p_colwhere||' =''' ||p_where||''' '; 开头的第一个单引号是和语句末尾最后一个单引号的对应还是和紧接着select后面的那个单引号对应,而'SELECT '||p_colname||' FROM '||p_tabname; 这句末尾为什么没单引号?
还有这里的||是起连接作用还是其他用途,还有就是select v_pcol into :1 from dual;这句话什么意思,请指教。
2、而'SELECT '||p_colname||' FROM '||p_tabname; 短句为:
'select ' ||pcolname|| ' from ' || ptabname;
这样更好看。 p_tabname是变量,所以不需要单引号,前面都已经成对出现了,他后面加,加给谁呢?
3、||是连接符
4、相当于动态执行了一条语句。
这句话能够正常执行吗?
就好比select * from tab_name where col_name = '123',总得来说基本同意1楼的说法。