Ich möchte alle Tabellen mit ABC-Spalte aktualisieren. Nötig, die Tabellen zu überspringen, die keine Daten hat. Ich habe ein Problem bei der Überprüfung der Zählung der Tabelle in a Cursorschleife. PLSQL CodeOrakel Plsql-Prozedur dynamische Zählung der Tabellen in Cursor-Schleife
create or replace procedure testp is
CURSOR c_testp
IS
SELECT table_name,
column_name
FROM all_tab_columns
WHERE column_name IN('ABC')
ORDER BY table_name;
c int;
BEGIN
FOR table_rec IN c_testp
LOOP
BEGIN
SELECT COUNT(*)
INTO c
FROM table_rec.table_name;
IF(c>0) THEN
query := 'update '||table_rec.table_name||' set '||table_rec.column_name ||'= xyz';
EXECUTE IMMEDIATE query;
COMMIT;
END IF;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('data not found');
WHEN OTHERS THEN
dbms_output.put_line('others');
END;
END LOOP;
END;
Sie müssen die Zeilenanzahl nicht überprüfen. Wenn es keine Zeilen in der Tabelle gibt, wird das 'update' nichts tun. Entfernen Sie einfach diesen Teil (aber um die Frage zu beantworten: Sie brauchen auch dafür dynamisches SQL). –