Plsql “a”的类型是什么;选择";?

Plsql “a”的类型是什么;选择";?,plsql,Plsql,如果我有一个执行SELECT的函数,我如何返回这个结果?选择结果的类型是什么 然后我如何使用返回的结果并对其进行处理(比如循环并打印)?假设您希望从表中提取值并对其进行处理: 如果只想查找一条特定记录,可以执行以下操作: DECLARE l_variable1 table_name.column_name%TYPE; l_variable2 table_name.column_name%TYPE; BEGIN SELECT column1, column2 INTO l

如果我有一个执行SELECT的函数,我如何返回这个结果?选择结果的类型是什么


然后我如何使用返回的结果并对其进行处理(比如循环并打印)?

假设您希望从表中提取值并对其进行处理:

如果只想查找一条特定记录,可以执行以下操作:

DECLARE
  l_variable1  table_name.column_name%TYPE;
  l_variable2  table_name.column_name%TYPE;

BEGIN
  SELECT column1, column2
    INTO l_variable1, l_variable2
    FROM table_name
   WHERE column_name_id = 138;
END;
这仅在返回一行时有效,否则会出现异常,表明查询返回了多行

如果希望多条记录形成一个表/视图,并且需要迭代,请使用游标

DECLARE
   CURSOR C_cursor
   IS
        SELECT column1, column2, columnN
          FROM table_name
        --other clauses

   R_cursor_row   C_cursor%ROWTYPE;
BEGIN
   OPEN C_cursor;

   LOOP
      FETCH C_cursor 
       INTO R_cursor_row;
       EXIT WHEN C_cursor%NOTFOUND;

      --do what you need for each record
   END LOOP;

   CLOSE C_cursor;
END; 

也许你的意思是这样的

DECLARE  
    /* Define the REF CURSOR type. */  
    TYPE curvar_type IS REF CURSOR RETURN table_name%ROWTYPE;  
    /* Reference it in the parameter list. */  
PROCEDURE open_query (curvar_out OUT curvar_type)  
IS  
    local_cur curvar_type;  
BEGIN  
    OPEN local_cur FOR SELECT * FROM table_name;  
    curvar_out := local_cur;  
END;
相反,
表\u name%ROWTYPE
可以是视图或显式游标名称

与甲骨文 (我有Oracle 10/11,可能在早期版本中更难?)

它是一个
%ROWTYPE
。您必须使用
批量收集到
中来收集它

e、 g


提示:游标-或-如果只有一个值左右:选择输入我尝试学习游标、引用游标、记录集,但我感到困惑,试图一次只取一个值。试着从一个简单的问题开始:比如,我在函数中做了一个选择,我如何返回结果?我以后如何使用结果(除了循环和使用PUT_行)?接下来,我如何链接几个返回/接收“选择”结果的函数?[我有点思考函数式编程风格:采取集合应用操作,返回,给予其他东西,应用操作,返回,给予其他东西(另一个函数);我这样想是不是错了?]有点模糊,但我最近也有同样的问题,并在Oracle下回答,请阅读,例如,这是一个非常好的资源。我需要返回使用函数的结果。只需将数据保存到一个类型中,然后返回该类型或该类型的表。
declare
  TYPE t_ iS TABLE OF MY_TABLE%ROWTYPE;
  v_t t_;
begin
   select * bulk collect into v_t from MY_TABLE where rownum=1 ;
--- then for printing it --- /!\ depends of the data in your table:
   FOR i in 1..v_t.count
   loop
      dbms_output.put_line(to_char(v_t(i).MY_COLUMN));
   end loop;
end;
/