簡體   English   中英

是否可以在Oracle PL / SQL中執行此操作?

[英]Is it possible to do this in Oracle PL/SQL?

我有一個名為TABLE1的常規表,其中包含列NUMBER(8)和列varchar2(100)

現在我創建了一個具有兩個屬性的OBJECT TYPE T_MYTYPE :一個NUMBER和另一個varchar2

簡而言之,它們完全相同。

現在我想做以下事情。

v_obj T_MYTYPE;

begin 
 select * into v_obj from TABLE1 t1 where t1.num = 9;--guaranteed to return only ONE row!!
end;  

但是PL / SQL:ORA-00947:值不夠 ..

這是很令人沮喪......我只是想能夠返回一行數據到一個集合! 無論是記錄還是對象類型!!,我不在乎......我似乎無法做出這項工作...... !!!! 誰能幫忙?

您可以。 您只需要使用對象構造函數

SQL> create type t_simple_emp
  2      as object
  3  (
  4    empno number,
  5    ename varchar2(100)
  6  );
  7  /

Type created.

SQL> declare
  2    l_simple_emp t_simple_emp;
  3  begin
  4    select t_simple_emp( empno, ename )
  5      into l_simple_emp
  6      from emp
  7     where ename = 'KING';
  8  end;
  9  /

PL/SQL procedure successfully completed.

在你的情況下,它會

SELECT t_mytype( column1, column2 )
  INTO v_obj
  FROM table1 t1
 WHERE t1.num = 9;

如果您要做的只是從表中選擇整行到記錄類型,那么,您想要像ruakh建議的那樣做,只需聲明%ROWTYPE記錄

declare
  l_emp_rec emp%rowtype;
begin
  select *
    into l_emp_rec
    from emp
   where ename = 'KING';
end;
/

而不是這個:

v_obj T_MYTYPE;

嘗試這個:

v_obj table1%ROWTYPE;

聲明它與table1的行具有完全相同的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM