如何在 PL/SQL CURSOR 中将参数作为输入?
How to give parameter as input in PL/SQL CURSOR?
我正在尝试执行以下代码。
我给 v_Model_UserName 作为输入。我在 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 UserName 指定为 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_Model_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;
我正在尝试执行以下代码。 我给 v_Model_UserName 作为输入。我在 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 UserName 指定为 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_Model_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;