Plsql 如何在PL SQL中添加插入SELECT的日期?
对于我的家庭作业,我需要制作一个包,其中包含一个过程,该过程从表dwdimartist中删除所有记录,然后用表艺术家的所有记录填充该表,并添加一个日期为今天的字段 这是我创造的,它很有效,但我不知道它是否足够有效。使用光标在表中的每条记录上循环是否更好Plsql 如何在PL SQL中添加插入SELECT的日期?,plsql,oracle11g,oracle-sqldeveloper,Plsql,Oracle11g,Oracle Sqldeveloper,对于我的家庭作业,我需要制作一个包,其中包含一个过程,该过程从表dwdimartist中删除所有记录,然后用表艺术家的所有记录填充该表,并添加一个日期为今天的字段 这是我创造的,它很有效,但我不知道它是否足够有效。使用光标在表中的每条记录上循环是否更好 CREATE OR REPLACE PACKAGE BODY dwh AS PROCEDURE filldwh IS today_date DATE := SYSDATE; BEGIN DELETE FROM dwd
CREATE OR REPLACE PACKAGE BODY dwh AS
PROCEDURE filldwh IS
today_date DATE := SYSDATE;
BEGIN
DELETE FROM dwdimartist;
INSERT INTO dwdimartist (artistkey, name) (SELECT artistid, name FROM artist);
UPDATE dwdimartist SET added = today_date;
END filldwh;
END dwh;
像您这样简单的SQL查询比游标或隐式循环更好 可能的改进: 您应该立即执行,无需更新:在插入期间设置日期
INSERT INTO dwdimartist (artistkey, name, added)
(SELECT artistid, name, sysdate FROM artist);
希望它有帮助像您这样简单的SQL查询比游标或隐式循环更好 可能的改进: 您应该立即执行,无需更新:在插入期间设置日期
INSERT INTO dwdimartist (artistkey, name, added)
(SELECT artistid, name, sysdate FROM artist);
希望它能帮助你,你不需要使用游标。你几乎比不上插入。。。选择此选项是因为它本身就是SQL,而且在大多数情况下,由于本机dbms优化,它比任何编程结构都工作得更好。但是,如果减少I/O操作的数量,您可以做得更好。这里不需要更新。只需将sysdate添加到select并将所有内容一起插入即可
insert into dwdimartist(artistkey, name, added) select artistid, name, sysdate from artist;
另一个需要改进的是“删除”。虽然出于学习目的,它是一个小表,但您不会感觉到delete和truncate之间有什么区别,但对于真正的ETL任务和大表,您肯定会看到它。是的,您不能在PL/SQL中直接使用truncate,但有三种方法:
但是,请记住,调用truncate将像任何ddl命令一样执行commit。所以有时候删除可能是唯一的选择。但即使是这样,您也应该在整个表中避免使用它。您不需要使用游标。你几乎比不上插入。。。选择此选项是因为它本身就是SQL,而且在大多数情况下,由于本机dbms优化,它比任何编程结构都工作得更好。但是,如果减少I/O操作的数量,您可以做得更好。这里不需要更新。只需将sysdate添加到select并将所有内容一起插入即可
insert into dwdimartist(artistkey, name, added) select artistid, name, sysdate from artist;
另一个需要改进的是“删除”。虽然出于学习目的,它是一个小表,但您不会感觉到delete和truncate之间有什么区别,但对于真正的ETL任务和大表,您肯定会看到它。是的,您不能在PL/SQL中直接使用truncate,但有三种方法: