返回所有屬性我不知道我怎麼能向選舉子句返回所有屬性PL/SQL如何在ROW
我想是這樣的:
DECLARE
v_user USER%ROWTYPE
BEGIN
INSERT INTO User
VALUES (1,'Bill','QWERTY')
RETURNING * INTO v_user;
END;
RETURNING * INTO
得到一個錯誤,如何我可以更換*
嗎?
返回所有屬性我不知道我怎麼能向選舉子句返回所有屬性PL/SQL如何在ROW
我想是這樣的:
DECLARE
v_user USER%ROWTYPE
BEGIN
INSERT INTO User
VALUES (1,'Bill','QWERTY')
RETURNING * INTO v_user;
END;
RETURNING * INTO
得到一個錯誤,如何我可以更換*
嗎?
這將是整齊的,如果我們可以做這樣的事情,但可惜:
SQL> declare
2 v_row t23%rowtype;
3 begin
4 insert into t23
5 values (my_seq.nextval, 'Daisy Head Maisy')
6 returning * into v_row;
7 end;
8/
returning * into v_row;
*
ERROR at line 6:
ORA-06550: line 6, column 19:
PL/SQL: ORA-00936: missing expression
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored
SQL>
我相信有可能是此功能的記錄變更請求,因爲我知道很多人希望它。但是現在我們所能做的只是每一列的冗長規格:
SQL> declare
2 v_row t23%rowtype;
3 begin
4 insert into t23
5 values (my_seq.nextval, 'Daisy Head Maisy')
6 returning id, person_name into v_row;
7 end;
8/
PL/SQL procedure successfully completed.
SQL>
壞消息,如果你有很多列!我懷疑原因是,大多數表都有相對較少的派生列(分配給ID的序列,分配給CREATED_DATE的sysdate等),所以大多數值應該已經知道(或至少知道)插入過程。
編輯
我很關心如何返回所有 屬性,無需冗長的每列的 規範;)也許 這是不可能的。
我想我已經說得很清楚,但無論如何:是目前我們沒有使用*
或一些類似的非特異性機制的返回子句。
Thx回覆。 我知道你的例子很好,但我很在意如何返回所有的屬性,沒有每列的冗長規範;) 也許這是不可能的。感謝您的時間 – kunkanwan 2010-05-23 10:50:36
文件指出 「returning_clause可以檢索列表達式」 http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_9014.htm#BABJFHEF *(或table_alias。* )特定於SELECT http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_10002.htm#i2080424 – 2010-05-23 23:02:52
備註:在PostgreSQL中可能 - 請參閱http://stackoverflow.com/questions/8820789/oracle-equivalent-of-postgresql-insert-returning – filiprem 2012-01-11 16:18:39
@filiprem:在Postgres中,您甚至不需要程序阻止這一點。它可以用於更方便的普通SQL。 – 2014-01-27 21:25:22