2013-04-24 2 views
0

У меня возникла проблема с возможностью запуска моего SQL-скрипта целиком, хотя, если я индивидуально выбираю операторы, они легко запускаются.Ошибка при выполнении всего файла SQL. (Oracle)

Я считаю, что проблема кроется в моих блоках, которые я добавил.

Одним из них является:

begin 
for i in (select constraint_name, table_name from user_constraints where constraint_type ='R' 
and status = 'ENABLED') LOOP 
execute immediate 'alter table '||i.table_name||' disable constraint '||i.constraint_name||''; 
end loop; 
end; 

Опять же, я могу запустить каждый сегмент в отдельности без вины, и даже весь файл минус эти блоки кода так же хорошо. Но когда я добавляю эти кодовые блоки, он не запускается.

EDIT: Извините, вот ошибки и лучшее объяснение.

Журнал начинается с «old: begin», а затем следует путем записи всего скрипта вместо его запуска. Сама ошибка:

Error report: 
ORA-06550: line 11, column 1: 
PLS-00103: Encountered the symbol "TRUNCATE" 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

Вот код без заявлений INSERT, так как я знаю, что эти работы отлично.

/* 
* NOTE: For some reason I have yet to figure out, I can not run the Disable Foreign Keys or 
*  Enable Foreign Keys blocks with the entiriry of the script. So I have been having to 
*  disable them, run the truncates, and then enable them. Then, and only then, can I 
*  run the rest of the INSERT statements. 
*/ 

/* 
* My New Cat Project 
*/ 

/* 
* DISABLE FOREIGN KEYS 
* 
* CODE USED FROM: 
* http://blog.yourdotnetsolution.com/2008/05/how-to-disable-or-enable-all-foreign.html 
*/ 
begin 
for i in (select constraint_name, table_name from user_constraints where constraint_type ='R' 
and status = 'ENABLED') LOOP 
execute immediate 'alter table '||i.table_name||' disable constraint '||i.constraint_name||''; 
end loop; 
end; 

/* 
* TRUNCATE TABLES AND DROP SEQUENCES 
*/ 
TRUNCATE TABLE CARE; 
TRUNCATE TABLE FAVORITES; 
TRUNCATE TABLE MEDICINE_PRESCRIBED; 
TRUNCATE TABLE MEDICATION; 
TRUNCATE TABLE MEDICAL_CONDITIONS; 
TRUNCATE TABLE MEDICAL_INFO; 
TRUNCATE TABLE SURGERY; 
TRUNCATE TABLE TREATMENT; 
TRUNCATE TABLE VET_VISIT; 
TRUNCATE TABLE VET; 
TRUNCATE TABLE CAT_RECEIVED; 
TRUNCATE TABLE RELINQUISHER; 
TRUNCATE TABLE CAT_FOUND; 
TRUNCATE TABLE ADOPTION; 
TRUNCATE TABLE ADOPTER; 
TRUNCATE TABLE EVENT; 
TRUNCATE TABLE DONATIONS; 
TRUNCATE TABLE DONOR; 
TRUNCATE TABLE MILEAGE; 
TRUNCATE TABLE FCP_EXPENSE; 
TRUNCATE TABLE EXPENSE_TYPE; 
TRUNCATE TABLE FCP_INITIALIZATION; 
TRUNCATE TABLE FOSTER_CARE_PROVIDER; 
TRUNCATE TABLE ORGANIZATION; 
TRUNCATE TABLE CAT_TEMPERAMENTS; 
TRUNCATE TABLE CAT; 

DROP SEQUENCE CAT_SEQ; 
DROP SEQUENCE CAT_TEMPERAMENTS_SEQ; 
DROP SEQUENCE ORGANIZATION_SEQ; 
DROP SEQUENCE FOSTER_CARE_PROVIDER_SEQ; 
DROP SEQUENCE FCP_INITIALIZATION_SEQ; 
DROP SEQUENCE EXPENSE_TYPE_SEQ; 
DROP SEQUENCE FCP_EXPENSE_SEQ; 
DROP SEQUENCE MILEAGE_SEQ; 
DROP SEQUENCE DONOR_SEQ; 
DROP SEQUENCE DONATIONS_SEQ; 
DROP SEQUENCE EVENT_SEQ; 
DROP SEQUENCE ADOPTER_SEQ; 
DROP SEQUENCE ADOPTION_SEQ; 
DROP SEQUENCE CAT_FOUND_SEQ; 
DROP SEQUENCE RELINQUISHER_SEQ; 
DROP SEQUENCE CAT_RECEIVED_SEQ; 
DROP SEQUENCE VET_SEQ; 
DROP SEQUENCE VET_VISIT_SEQ; 
DROP SEQUENCE TREATMENT_SEQ; 
DROP SEQUENCE SURGERY_SEQ; 
DROP SEQUENCE MEDICAL_INFO_SEQ; 
DROP SEQUENCE MEDICAL_CONDITIONS_SEQ; 
DROP SEQUENCE MEDICATION_SEQ; 
DROP SEQUENCE MEDICINE_PRESCRIBED_SEQ; 
DROP SEQUENCE FAVORITES_SEQ; 
DROP SEQUENCE CARE_SEQ; 

/* 
* ENABLE FOREIGN KEYS 
* 
* CODE USED FROM: 
* http://blog.yourdotnetsolution.com/2008/05/how-to-disable-or-enable-all-foreign.html 
*/ 
begin 
for i in (select constraint_name, table_name from user_constraints where constraint_type ='R' 
and status = 'DISABLED') LOOP 
execute immediate 'alter table '||i.table_name||' enable constraint '||i.constraint_name||''; 
end loop; 
end; 

/* 
* CREATE SEQUENCES 
*/ 

/* 
* CAT 
*/ 
CREATE SEQUENCE CAT_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* CAT TEMPERAMENTS 
*/ 
CREATE SEQUENCE CAT_TEMPERAMENTS_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 


/* 
* ORGANIZATION 
*/ 
CREATE SEQUENCE ORGANIZATION_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 


/* 
* FOSTER CARE PROVIDER 
*/ 
CREATE SEQUENCE FOSTER_CARE_PROVIDER_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* FCP INITIALIZATION 
*/ 
CREATE SEQUENCE FCP_INITIALIZATION_SEQ 
    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 


/* 
* EXPENSE TYPES 
*/ 
CREATE SEQUENCE EXPENSE_TYPE_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* FOSTER CARE PROVIDER: EXPENSES 
*/ 
CREATE SEQUENCE FCP_EXPENSE_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* MILEAGE 
*/ 
CREATE SEQUENCE MILEAGE_SEQ 

    MINVALUE   1 
    INCREMENT BY  1 
    CACHE    20; 

/* 
* DONORS 
*/ 
CREATE SEQUENCE DONOR_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* DONATIONS 
*/ 
CREATE SEQUENCE DONATIONS_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* EVENTS 
*/ 
CREATE SEQUENCE EVENT_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* ADOPTER 
*/ 
CREATE SEQUENCE ADOPTER_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* ADOPTION 
*/ 
CREATE SEQUENCE ADOPTION_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* CATS FOUND 
*/ 
CREATE SEQUENCE CAT_FOUND_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* RELINQUISHERS 
*/ 
CREATE SEQUENCE RELINQUISHER_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* CATS RECEIVED 
*/ 
CREATE SEQUENCE CAT_RECEIVED_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* VET 
*/ 
CREATE SEQUENCE VET_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* VET VISITS 
*/ 
CREATE SEQUENCE VET_VISIT_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* TREATMENTS 
*/ 
CREATE SEQUENCE TREATMENT_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* SURGERY 
*/ 
CREATE SEQUENCE SURGERY_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* MEDICAL INFO 
*/ 
CREATE SEQUENCE MEDICAL_INFO_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* MEDICAL CONDITIONS 
*/ 
CREATE SEQUENCE MEDICAL_CONDITIONS_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 


/* 
* MEDICATION 
*/ 
CREATE SEQUENCE MEDICATION_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* MEDICINE PRESCIBED 
*/ 
CREATE SEQUENCE MEDICINE_PRESCRIBED_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 


/* 
* FAVORITES 
*/ 
CREATE SEQUENCE FAVORITES_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 

/* 
* CARE 
*/ 
CREATE SEQUENCE CARE_SEQ 

    MINVALUE  1 
    INCREMENT BY 1 
    CACHE   20; 
+5

Вам нужно иметь '/' после последней строки. –

+0

предоставьте данные об ошибке. Будет здорово, если вы предоставите весь скрипт sql, который поможет легко понять проблему. –

+0

Хорошо, я предоставил весь сценарий. Хотя я уверен, что проблема заключается в коде, который я дал. – MrJewbagel

ответ

1

Поскольку информация о коде ошибки не возвращена из вашего блока, подробного ответа не сообщается.

  • Если вы сделаете такую ​​операцию, убедитесь, что оператор выбора внутри цикла for фактически возвращает что-либо.
  • , если у вас есть внешние ключи, они должны быть отключены (справкой из внешнего ключа для инвалидов первичного ключа приводит к ошибке)

Выполнить немедленным должен содержать корректный DDL также.

+0

Извините, я должен был объяснить это более подробно. Я был в спешке, это была мертвая неделя, и я устал и не думал должным образом. – MrJewbagel

0

Функции должны быть завершены с помощью / при работе из файла SQL в Oracle. Например:

begin 
for i in (select constraint_name, table_name from user_constraints where constraint_type ='R' 
and status = 'ENABLED') LOOP 
execute immediate 'alter table '||i.table_name||' disable constraint '||i.constraint_name||''; 
end loop; 
end; 
/
Смежные вопросы