【发布时间】:2014-08-14 07:12:17
【问题描述】:
我正在 oracle 中创建一个存储过程来查找所有表的行数。我必须每天运行这些程序才能找到在 ETL 之后加载的每日数据。我已经创建了以下过程。
create or replace Procedure Proc_RSE_TABLE_ROW_Count AS
TYPE c_table_list IS REF CURSOR ;
C_table_name c_table_list;
RSE_ROW_COUNT NUMBER;
SQL_11g VARCHAR2(500);
SQL_CURSOR VARCHAR2(500);
V_TABLE_NAME VARCHAR2(30);
BEGIN
SQL_CURSOR := 'SELECT
TRIM(table_name) table_name
FROM RSE_TABLE_COUNT ';
OPEN C_table_name FOR SQL_CURSOR;
LOOP
FETCH C_table_name INTO V_TABLE_NAME;
EXIT WHEN C_table_name%NOTFOUND;
SQL_11g := 'SELECT COUNT(1) FROM '||V_TABLE_NAME;
EXECUTE IMMEDIATE SQL_11g INTO RSE_ROW_COUNT;
INSERT into RSE_TABLE_COUNT (TABLE_NAME, ROW_COUNT, DATE_LAST_UPDATED)
values ('vtable_name', rse_row_count, sysdate)
/*UPDATE RSE_TABLE_COUNT SET ROW_COUNT=RSE_ROW_COUNT,DATE_LAST_UPDATED=sysdate
WHERE table_name=V_TABLE_NAME;
commit; */
END LOOP;
CLOSE C_table_name;
END;
但我想插入每日数据,而不是我目前使用的。随着更新,历史正在被超越。并且插入我得到错误。我想在运行过程时在表中插入 table_name、row_count 和 sysdate,而不影响以前的数据。我是 oracle 语法的新手,所以请帮忙..
【问题讨论】:
-
您能否更具体地说明您的要求以及您的错误是什么?
-
错误如下:/*错误(25,1):PL/SQL:SQL语句被忽略/*错误(26,28):PL/SQL:ORA-01756:引用的字符串不正确终止/ *错误(37):PLS-00103:在预期以下之一时遇到符号“文件结尾”:;通过更新,我得到了我想要的,但前几天的计数被删除了。
-
啊,你的意思是说,当你更新时,上一行正在更新为当前行?
-
是的。我得到今天的计数,但我希望昨天的计数与昨天的日期保持一致。
-
那么您不应该更新该记录,而是应该通过插入记录来添加新行。