Как я могу создать процедуру со следующим кодом, потому что я новичок в oracle, всегда использовал sybase/ms sql, и это было проще.Как добавить блок annonymus в процедуру Oracle?
DECLARE
temp VARCHAR2 (255);
last_val NUMBER(9, 0);
CURSOR c1 IS
SELECT DISTINCT table_name
FROM user_tab_cols
WHERE column_name = 'id';
BEGIN
FOR asd IN c1 LOOP
temp := asd.table_name;
EXECUTE IMMEDIATE 'select NVL(max("id"),0)+1 from "'||temp||'"' INTO
last_val;
BEGIN
EXECUTE IMMEDIATE 'drop sequence "seq_'|| temp||'"';
EXECUTE IMMEDIATE 'create SEQUENCE "seq_'|| temp||'" MINVALUE '||
last_val||
'MAXVALUE 999999999999999999999999999 INCREMENT BY 1 NOCACHE';
EXECUTE IMMEDIATE 'select '||temp||'.nextval from dual';
EXECUTE IMMEDIATE 'ALTER SEQUENCE "seq_'||temp||'" INCREMENT BY 1';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
COMMIT;
END;
Как есть операторы DDL там с двумя неявными совершает каждое присутствие явного принятия не имеет значения. Более сильное возражение - КОГДА ДРУГИЕ, ЧЕМ NULL, что ужасно. Это, вероятно, не имеет значения, поскольку у wuery есть DISTINCT, и операция сортировки должна позаботиться о проблеме «моментального снимка слишком старой». И column_name = 'id' должно быть column_name = 'ID'. Нет необходимости в явном указателе - придерживаться неявного. И не объявляйте temp, просто ссылку c1.table_name. И last_val должно быть просто целым числом, а не NUMBER (9,0) –