Input 如何在PL/SQL游标中输入参数?

Input 如何在PL/SQL游标中输入参数?,input,plsql,parameters,cursor,Input,Plsql,Parameters,Cursor,我正在尝试执行下面的代码。 我给v_Model_用户名作为输入。我在select语句中使用它。但是参数没有在select语句中输入 SET SERVEROUTPUT ON; DECLARE v_Model_UserName VARCHAR2(30) := UPPER('&Model_UserName'); v_role VARCHAR2(3000); CURSOR v_role1 is SELECT granted_role from dba_role_p

我正在尝试执行下面的代码。 我给v_Model_用户名作为输入。我在select语句中使用它。但是参数没有在select语句中输入

SET SERVEROUTPUT ON;
DECLARE
    v_Model_UserName VARCHAR2(30) := UPPER('&Model_UserName');
    v_role VARCHAR2(3000);
    CURSOR v_role1 is
    SELECT granted_role from dba_role_privs where grantee = ('v_Model_UserName') ;
    BEGIN
    OPEN v_role1;
    LOOP
    FETCH v_role1 INTO v_role;
    EXIT WHEN v_role1%NOTFOUND;
    dbms_output.put_line(v_role);
    END LOOP;
    CLOSE v_role1;
    END;
    /
例如,如果我将&Mode用户名指定为HR,它将被指定给变量v_Model_UserName=HR

但在游标select语句中,它仍然是

"SELECT granted_role from dba_role_privs where grantee = 
('v_Model_UserName');"

我希望它是:

"SELECT granted_role from dba_role_privs where grantee = 'HR';"
我也试着给予

  SELECT granted_role from dba_role_privs where grantee = v_Model_UserName;

仍然没有在此处分配HR值。

不要引用变量名,因为这会使它只是一个文本字符串“v\u Model\u UserName”:

SELECT granted_role from dba_role_privs where grantee = v_Model_UserName;

(我还删除了多余的括号。它们没有造成任何伤害,但没有增加任何价值)。

我犯了游标语法错误。 下面的代码起作用

DECLARE
    v_Model_UserName VARCHAR2(30) := UPPER('&Model_UserName');
    v_role VARCHAR2(3000);
    CURSOR v_role1 (var01  Varchar2 )is
    SELECT granted_role from dba_role_privs where grantee = var01;
    BEGIN
    OPEN v_role1 (v_Model_UserName);
    LOOP
    FETCH v_role1 INTO v_role;
    EXIT WHEN v_role1%NOTFOUND;
      dbms_output.put_line(v_role);
    END LOOP;
    CLOSE v_role1;
    END;

尝试了此操作,但仍然没有在此处添加输入。它仍然是一样的。@Kiruthika您需要使用您现在正在运行的代码更新您的问题,因为我已经根据您当前的问题给出了正确的修复方法!我的建议是将代码整齐清晰地布局。这将更易于理解、维护和调试。对于例如,
declare
begin
end
属于同一级别,循环的内容应该向右缩进一次。