请教:open v_cursor for 时遇到的问题
第一个问题:
第二个问题:
create or replace function get_roles(user_id in number ) return varchar2
is
v_name varchar2(2000);
TYPE type_cursorsss IS REF CURSOR;
cur_recwe type_cursorsss;
BEGIN
OPEN cur_recwe FOR select username from adm_user; -- 使用open for 的形式打开游标
-- 为什么不能使用这种 for in loop 的形式进行循环
-- 提示错误 ‘CUR_RECWE’ is not a procedure or is undefined
for v_name in cur_recwe loop
dbms_output.put_line(v_name);
end loop;
RETURN ''; -- 返回一个空的,故意的
end get_roles;
create or replace function get_roles(user_id in number ) return varchar2
is
v_name varchar2(2000);
TYPE type_cursorsss IS REF CURSOR;
cur_recwe type_cursorsss;
BEGIN
OPEN cur_recwe FOR select username from adm_user; -- 使用open for 的形式打开游标
-- 是不是只能使用这种 loop fetch 的形式进行循环
-- 这样没有编译报错的情况
loop
fetch cur_recwe into v_name ;
dbms_output.put_line(v_name);
end loop;
RETURN ''; -- 返回一个空的,故意的
end get_roles;
第二个问题:
create or replace function get_roles(user_id in number ) return varchar2
is
cursor cur_rec is ( select r.name from adm_user where id = user_id) ;
-- 这样直接使用传进来的参数不行,会查询 adm_user 表中的所有记录
-- user_id 根本就没有起到作用
BEGIN
FOR cur_sin IN cur_rec LOOP
l_text := l_text || ';' || cur_sin.name;
dbms_output.put_line(l_text);
END LOOP;
RETURN ''; -- 故意返回一个空
end get_roles;
-- 使用下面的方法才有效,不知道为什么
create or replace function get_roles(user_id in number ) return varchar2
is
v_userid number := user_id; -- 先声明一个变量,并把参数赋给他
cursor cur_rec is ( select r.name from adm_user where id = v_userid) ; -- 在这儿使用 v_userid 刚才声明的变更
BEGIN
FOR cur_sin IN cur_rec LOOP
l_text := l_text || ';' || cur_sin.name;
dbms_output.put_line(l_text);
END LOOP;
RETURN ''; -- 故意返回一个空
end get_roles;
...全文
相关推荐
SQL语句游标For.Loop与Open.Close比较
例如:```sqlDECLARE v_employee_row employee%ROWTYPE;BEGIN FOR v_row IN (SELECT * FROM employee) LOOP --
ABAP OPEN SQL里OPEN CURSOR和SELECT的比较
OPEN CURSOR After the OPEN CURSOR statement, the database cursor is positioned in front of the first line of the result set. FETCH This statement extracts the requested rows (using the addition I...
oracle存储过程的基本语法
**变量赋值** 可以使用`:=`运算符给变量赋值,如`V_TEST := 123;`。6. **FOR IN循环与Cursor** FOR循环与Cursor结合,可以遍历查询结果。
oracle游标越界
以下是一个示例代码:```create or replace PROCEDURE PROC_STU1 ASBEGIN --定义游标,名称为 cur_stu cursor cur_stu is select
oracle游标的使用
声明显式游标的基本语法如下:```sqlDECLARE cursor_name CURSOR FOR SELECT column1, column2, ...


基础和管理
