سؤال

طاب مساؤك.لدي مشكلة في التنفيذ الفوري في أوراكل.أنا أبحث في مواضيع أخرى، ولكن لا توجد إجابة كانت مفيدة.هذا هو الرمز:أولاً، الجدول الذي أحتاج إلى إدراجه داخل المشغل...

create global temporary table TEMP_PK (COL_NAME VARCHAR(100), COL_TYPE VARCHAR(100), ROW_VALUE VARCHAR(100)) on commit preserve rows;

الآن، الزناد الخاص بي

CREATE OR REPLACE TRIGGER ICidade AFTER
  INSERT ON Cidade FOR EACH ROW DECLARE TYPE EmpCurTyp IS REF CURSOR;
  emp_cv EmpCurTyp;
  col_name_aux VARCHAR(100);
  col_type_aux VARCHAR(100);
  stm          VARCHAR(4000):='';
  BEGIN
    -- Pegando as PKS
    FOR j IN
    (SELECT d.Column_Name coluna,
        d.DATA_TYPE tipo
      FROM user_cons_columns ucc,
        user_constraints uc,
        (SELECT COLUMN_NAME,DATA_TYPE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='CIDADE'
        ) d
      WHERE uc.constraint_name=ucc.constraint_name
      AND uc.constraint_type  ='P'
      AND uc.table_name       = 'CIDADE'
      AND d.COLUMN_NAME       =ucc.Column_Name
    )
    LOOP
      stm := concat
      (
        stm, 'INSERT INTO TEMP_PK VALUES ('
      )
      ;
      stm := concat(stm, j.coluna);
      stm := concat(stm,', ');
      stm := concat(stm, j.tipo);
      stm := concat(stm,', ');
      stm := concat(stm, ':NEW.');
      stm := concat(stm,j.coluna);
      stm := concat(stm,')');

      EXECUTE IMMEDIATE stm;
      stm:='';
    END LOOP;


  END ICidade;
  /

يتم تجميع جيد.المشكلة هي عندما أضيف إدخالًا في الجدول "cidade" عندما أحاول إدخال ، على سبيل المثال:

Insert into Cidade Values (11,'Alegre','ES');

عندما أقوم بالتشغيل بدون التنفيذ الفوري، باستخدام وظيفة الطباعة، هذه هي النتيجة:

أدخل في قيم TEMP_PK ( CODCIDADE، NUMBER، :NEW.CODCIDADE)؛

مع التنفيذ الفوري، يعطي الخطأ التالي:

خطأ في البدء عند السطر:62 في Command - أدخل في قيم Cidade (11 ، "alegre" ، 'es') تقرير خطأ - خطأ SQL:أورا-00936:مفقود التعبير ORA-06512:في "PAULA.ICIDADE"، السطر 34 ORA-04088:خطأ أثناء تنفيذ Trigger 'Paula.icidade' 00936.00000 - "تعبير مفقود"

من المحتمل أن يكون خطأً غبيًا، لكن لا يمكنني العثور عليه.

إذا، هل يمكن لأحد مساعدتي؟منذ الآن، شكرا لك.

هل كانت مفيدة؟

المحلول

يبدو أنك بحاجة إلى وضع اقتباسات واحدة حول حرفيات السلسلة التي يتم إدراجها في أعمدة COL_NAME و COL_TYPE.حاول إعادة كتابة الزناد ك:

giveacodicetagpre.

مشاركة واستمتع.

نصائح أخرى

أقترح عليك استخدام DBMS_OUTPUT.PUT_LINE للإخراج stm قبل تنفيذه.سيؤدي ذلك إلى تسهيل رؤية ما تقوم بتشغيله وسبب إنشاء SQL الخطأ.

في البداية، أنت غير ملزم بأي شيء :NEW

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top