Oracle执行立即选择错误
我有上面的程序。我有一个表,其中包含数据库中所有模式的所有表。在这个过程中,我尝试将每个表行都插入到表中。问题是我得到了这个错误:00933。00000-“SQL命令未正确结束”。奇怪的是,DBMS输出为每个表输出完美的数据。如果我做了一个例外,并试图执行立即只为用户我没有登录它的工作 为什么需要对Oracle执行立即选择错误,oracle,plsql,procedure,Oracle,Plsql,Procedure,我有上面的程序。我有一个表,其中包含数据库中所有模式的所有表。在这个过程中,我尝试将每个表行都插入到表中。问题是我得到了这个错误:00933。00000-“SQL命令未正确结束”。奇怪的是,DBMS输出为每个表输出完美的数据。如果我做了一个例外,并试图执行立即只为用户我没有登录它的工作 为什么需要对SELECT语句使用EXECUTE IMMEDIATE?@user75ponic-因为它们希望将表所有者和表名作为变量传递。如果将dbms\u输出移动到EXECUTE IMMEDIATE之前,您将看到
SELECT
语句使用EXECUTE IMMEDIATE
?@user75ponic-因为它们希望将表所有者和表名作为变量传递。如果将dbms\u输出
移动到EXECUTE IMMEDIATE
之前,您将看到它尝试了什么。顺便说一句,a会简化一点。@raulnoob-动态SQL是一个很难处理的问题。您需要更好的异常处理。一个好的开始是在执行动态语句之前显示它。这样,当你的灯笼裤坏了的时候,你就能发现它了。很可能是tbl\u table\u row\u count
@WilliamRobertson中的数据有问题-一条更新语句而不是三条将进一步简化:)
CREATE OR REPLACE PROCEDURE USP_table_row_count
AS
v_id NUMBER :=0;
v_table_name VARCHAR2(100);
v_owner VARCHAR2(100);
v_count NUMBER;
v_row_count NUMBER;
CURSOR c_tables IS
SELECT fld_id ,fld_owner, fld_table_name,fld_row_count_new FROM tbl_table_row_count;
BEGIN
OPEN c_tables;
LOOP
FETCH c_tables INTO v_id,v_owner, v_table_name, v_row_count;
EXIT WHEN c_tables%notfound;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||v_owner||'.'||v_table_name INTO v_count;
DBMS_OUTPUT.PUT_LINE(v_owner || ' '|| v_table_name ||' '|| v_count);
UPDATE TBL_TABLE_ROW_COUNT SET FLD_ROW_COUNT_OLD=V_ROW_COUNT WHERE FLD_id=v_id;
UPDATE TBL_TABLE_ROW_COUNT SET FLD_ROW_COUNT_NEW=V_COUNT WHERE FLD_id=v_id;
UPDATE TBL_TABLE_ROW_COUNT SET FLD_row_DIF=V_COUNT-v_ROW_COUNT WHERE FLD_id=v_id;
END LOOP;
CLOSE c_tables;
END;
/