otarachi said:
tham khảo nhé. lỗi trên là do bạn gọi function sai cách.
INSERT INTO table
(column1, column2, ... column_n, time, user )
SELECT expression1, expression2, ... expression_n, sysdate, 999
FROM source_table
[WHERE conditions];
Cảm ơn thím, nãy do em dùng lệnh SELECT nên không được, chuyển qua gọi bằng SQL*PLUS thì oke rồi.
votrieudi said:
procedure copy_abc is
begin
execute immediate 'truncate bang2';
execute immediate q['create table column as
(select column_name from user_tab_column where table_name ='bang1') ]';
for i in (select * from column)
loop
if i in (select * from condition) then
execute immediate q'[ insert into bang2

i)
select :i
from bang 1 ]' using in i;
;
end if;
end loop;
commit;
end copy_abc;
Cảm ơn thím, nhưng em không truncate bảng được ạ. Khách hàng nó giết em chết, DB cả triệu người dùng không làm cách này được ạ.
Trường hợp cụ thể thì thế này :
Database :
- Bang_1 : Col_1, Col_2, Col_3... Col_50
- Bang_2 : Col_1, Col_2, Col_3... Col_50, Time, user
INPUT :
- nvarchar :sql_str Câu lệnh SELECT (EX: 'SELECT Col_1,Col_2..Col_15 FROM Bang_1')
- nvarchar :danhsachcot danh sách các cột ( Ex: 'Col_1, Col_2, Col_3... Col_n')
Yêu cầu :
INSERT vào bảng 2 các value được lấy về từ câu select truyền vào.
Time : time hiện tại,
User: 'Test_User'
KH bảo làm tạm thời là:
INSERT INTO bang_2(danhsachcot) || sql_str ;
Sau đó
Update bang_2... WHERE Time = null AND user = null;
Nhưng KH ko muốn dùng cách này, vì ko đảm bảo câu lệnh UPDATE chạy đúng với các record vừa insert vào.
Thiím nào giúp em với