2016-03-06 25 views
-1

在oracle PLSQL中,如何将列名和列值传递给过程。 该过程基于where子句执行选择命令 ,使在执行plsql的过程中传递列名和列值查询

并且该过程将结果集(refcursor)存储在OUT参数中。

这里列名和columnvalue由用户

+0

你试过了什么?您只需在声明中指定输入和输出参数(网址为http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/parameter_declaration.htm#LNPLS1271)。但是,如果它可以是任何数据类型的列 - 那么必须将其输入参数parm作为一个字符串去掉,然后在proc中进行转换。 – EdStevens

+0

哦,我知道了'str:='select h。* from holidaymaster h where'|| column_name || '='''|| column_val || '' ''; 用于str的open ref_cursor; '它的工作原理将varchar2,日期和数目到目前为止。 – Sarabjeet

+1

**为什么2 downvotes ?? ** – Sarabjeet

回答

1

过去了,我可以看到你尚未分享任何投入。我试图按照您的要求复制 方案。请检查下面的代码段。希望这有助于

set serveroutput on; 

CREATE OR REPLACE PROCEDURE USER_INPUT_PROC(
    p_col_name_input IN VARCHAR2, 
    p_col_val_input IN VARCHAR2, 
    p_lst_out OUT sys_refcursor) 
AS 
    lv_col VARCHAR2(10000 CHAR); 
BEGIN 
    NULL; 
    SELECT DECODE(p_col_name_input,'empno',' AND EMPNO = '||''''||p_col_val_input||'''','ename',' AND ENAME = '||''''||p_col_val_input||'''','') 
    INTO lv_col 
    FROM DUAL; 
    OPEN p_lst_out FOR 'SELECT * FROM EMP 
WHERE 1 = 1 '||lv_col; 
END; 
0

要做到这一点安全,您需要使用DBMS_SQL包。编码变得相当复杂。

相关问题