Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

PL / SQL Cách trả về tất cả các thuộc tính trong ROW

Sẽ thật gọn gàng nếu chúng ta có thể làm điều gì đó như vậy nhưng than ôi:

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>

Tôi tin rằng có thể có một yêu cầu thay đổi được ghi lại cho tính năng này, bởi vì tôi biết rất nhiều người muốn nó. Nhưng hiện tại, tất cả những gì chúng ta có thể làm là đặc tả dài dòng của mọi cột:

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>

Tin xấu nếu bạn có nhiều cột!

Tôi nghi ngờ cơ sở lý luận là, hầu hết các bảng có tương đối ít cột dẫn xuất (trình tự được gán cho một ID, ngày mã hóa được gán cho CREATED_DATE, v.v.) vì vậy hầu hết các giá trị phải được biết (hoặc ít nhất là có thể biết) cho quá trình chèn.

chỉnh sửa

Tôi nghĩ rằng tôi đã nói rõ ràng, nhưng dù sao thì:vâng, hiện tại không thể sử dụng * hoặc một số cơ chế không cụ thể tương tự trong mệnh đề RETURNING.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép ORACLE_HOME

  2. Thực hiện nối bên trong cho nhiều cột trong cùng một bảng

  3. chọn NLS_LANG cho Oracle

  4. Hiển thị mô tả Múi giờ trong to_char () trong Oracle

  5. Xóa bằng kết nối trái trong Oracle 10g