Skip to Main Content

SQLcl

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

NO_SNAPSHOT error on project verify

Steen Vincentz JensenDec 19 2024 — edited Dec 19 2024

Using: Oracle SQLDeveloper Command-Line (SQLcl) version: 24.3.2.0 build: 24.3.2.330.1718

After doing an project export, I am trying to verify the exported files, but I get this error

SQL> project verify -v
-------- Results Summary ----------
Errors:     1
Warnings:   0
Info:       6
---------------------------------

Level     Group Name     Test Name                     Message
-----     ----------     -----------                   -------------------------
INFO      settings       verifynonpublicsettings       No unsupported internal settings found
INFO      init           verifyprojectname             The final project name will be "WHOIS2"
INFO      examples       exampletest                   a message
INFO      stage          stagechangelogcomplete        Stage Changelog validation found no issues.
INFO      project        sqlclversion                  SQLcl Version check passed
ERROR     snapshot       verifysnapshot                NO_SNAPSHOT
  FILE: path=src/database/whois2/triggers/parameter_ins_upd_rules_trg.sql
INFO      snapshot       verifysnapshot                Snapshot validation found no issues.

The failing file looks like this:

  CREATE OR REPLACE EDITIONABLE TRIGGER "PARAMETER_INS_UPD_RULES_TRG"
 BEFORE INSERT OR UPDATE
 ON PARAMETER
 FOR EACH ROW
DECLARE
  sqlstr  VARCHAR2(10000);
BEGIN
  /* Upper/lower case felter */
  :new.system    := nls_upper(:new.system);
  :new.parameter := nls_lower(:new.parameter);
  :new.datatype  := nls_upper(:new.datatype);

  /* Opbyg dynamisk en PL/SQL blok, der kan teste om datatype og value stemmer overens */
  sqlstr := 'DECLARE
               var   '||:new.datatype||';

             BEGIN
               ';

  IF :new.datatype = 'DATE' THEN
    sqlstr := sqlstr || 'var := to_date(:val,''DD-MM-YYYY HH24:MI:SS'');';
  ELSE
    sqlstr := sqlstr || 'var := :val;';
  END IF;

  sqlstr := sqlstr ||
            '
             EXCEPTION
             WHEN OTHERS THEN
               RAISE_APPLICATION_ERROR(-20001,'''||:new.value||' kan ikke konverteres til datatypen '||:new.datatype||'!'');
             END;';
  EXECUTE IMMEDIATE sqlstr USING :new.value;
END;

/
ALTER TRIGGER "PARAMETER_INS_UPD_RULES_TRG" ENABLE;


-- sqlcl_snapshot {"hash":"c5b488447db4299fe5c4bf1100ce69634281ab5e","type":"TRIGGER","name":"PARAMETER_INS_UPD_RULES_TRG","schemaName":"WHOIS2","sxml":"<TRIGGER  xmlns  =\"http://xmlns.oracle.com/ku\"  version  =\"1.0\"><SCHEMA>WHOIS2</SCHEMA><NAME>PARAMETER_INS_UPD_RULES_TRG</NAME><TRIGGER_TYPE>BEFORE</TRIGGER_TYPE><DML_EVENT><EVENT_LIST><EVENT_LIST_ITEM><EVENT>INSERT</EVENT></EVENT_LIST_ITEM><EVENT_LIST_ITEM><EVENT>UPDATE</EVENT></EVENT_LIST_ITEM></EVENT_LIST><SCHEMA>WHOIS2</SCHEMA><NAME>PARAMETER</NAME><REFERENCING><FOR_EACH_ROW></FOR_EACH_ROW></REFERENCING></DML_EVENT><PLSQL_BLOCK>DECLARE  sqlstr  VARCHAR2  (10000  );BEGIN  :new  .system  :=nls_upper  (:new  .system  );:new  .parameter  :=nls_lower  (:new  .parameter  );:new  .datatype  :=nls_upper  (:new  .datatype  );sqlstr  :='DECLARE
               var   '  ||:new  .datatype  ||';

             BEGIN
               '  ;IF  :new  .datatype  ='DATE'  THEN  sqlstr  :=sqlstr  ||'var := to_date(:val,''DD-MM-YYYY HH24:MI:SS'');'  ;ELSE  sqlstr  :=sqlstr  ||'var := :val;'  ;END  IF  ;sqlstr  :=sqlstr  ||'
             EXCEPTION
             WHEN OTHERS THEN
               RAISE_APPLICATION_ERROR(-20001,'''  ||:new  .value  ||' kan ikke konverteres til datatypen '  ||:new  .datatype  ||'!'');
             END;'  ;EXECUTE  IMMEDIATE  sqlstr  USING  :new  .value  ;END  ;</PLSQL_BLOCK></TRIGGER>"}

The trigger code contains a string with embedded linebreaks. These linebreaks are repeated in the xml part of the file and breaks the validation as it seems that the xml is supposed to one long line.

If I join the lines in the xml part manually into one long line, the validation error is solved, but this is not fun work as it has to be done everytime the trigger is dumped and we have other triggers with the same issue… :-(

Comments
Post Details
Added on Dec 19 2024
1 comment
81 views