Skip to main content

Hi guys,

I'm got an error trying to compile a program using a stored procedure.

Somebody knows this problem?

I'm using this sentence to compile:

cob -C IBMCOMP -C "p(cobsql) p(cp) endp" -x -o isismq02 isismq02.cbl ISISMQA2.cbl CONEXAO.CBL -L/dados/OracleSDK/10.2.0l_64/lib/ /dados/OracleSDK/10.2.0l_64/precomp/lib/cobsqlintf.o -lclntsh `cat /dados/OracleSDK/10.2.0l_64/lib/ldflags`   `cat /dados/OracleSDK/10.2.0l_64/lib/sysliblist` -ldl -lm   /dados/cobol/Password/libPassword.so –lmqicb

And I got this error:


* Micro Focus Cobsql Integrated Preprocessor

* CSQL-I-003: COBSQLTYPE is incorrect defaulting to ORACLE8

* CSQL-I-008: Invoking cp Preprocessor

* CSQL-I-018: Invoking Oracle Precompiler/Translator

 

System default option values taken from: /dados/OracleSDK/10.2.0l_64/precomp/adm

 

Error at line 4411, column 21 in file ISISMQA2.sks

           EXEC SQL EXECUTE

....................1

PCB-S-00008, Must use option SQLCHECK=SEMANTICS(FULL) when there is embedded PL/

SQL

* CSQL-F-016: UNIX error Return Code is 0001

cob64: error(s) in compilation: ISISMQA2.cbl

Mv CODE:

           EXEC SQL
                ALLOCATE :CURSOR-RETURN
           END-EXEC.
           MOVE 'ALLOC CURSOR-RETURN' TO AX-PROCEDURE.
           PERFORM XXX-INI-ERROR-SQL THRU XXX-fim-ERROR-SQL.
           
           EXEC SQL EXECUTE
              BEGIN
                OC.LISTA_PROP_ATIVA_OC_S1
                    (:NENT-NUM-CPF,
                     :CURSOR-RETURN);
               END;
           END-EXEC.
           MOVE 'CHAMADA STORED PROCEDURE' TO AX-PROCEDURE.
           PERFORM XXX-INI-ERROR-SQL THRU XXX-FIM-ERROR-SQL.
           
           EXEC SQL
                FETCH :CURSOR-RETURN
                INTO  :NDBL-CI-PROP-NBR,
                      :NDBL-CI-CUST-NBR,
                      :SDBL-CI-PROP-STAT-CODE
           END-EXEC.
           MOVE 'FETCH CURSOR-RETURN' TO AX-PROCEDURE.
           PERFORM XXX-INI-ERROR-SQL THRU XXX-FIM-ERROR-SQL.

Thank you !!


#COBOL
#semantics
#EXECSQLEXECUTE
#storedprocedure
#SQLCHECK
#Oracle

Hi guys,

I'm got an error trying to compile a program using a stored procedure.

Somebody knows this problem?

I'm using this sentence to compile:

cob -C IBMCOMP -C "p(cobsql) p(cp) endp" -x -o isismq02 isismq02.cbl ISISMQA2.cbl CONEXAO.CBL -L/dados/OracleSDK/10.2.0l_64/lib/ /dados/OracleSDK/10.2.0l_64/precomp/lib/cobsqlintf.o -lclntsh `cat /dados/OracleSDK/10.2.0l_64/lib/ldflags`   `cat /dados/OracleSDK/10.2.0l_64/lib/sysliblist` -ldl -lm   /dados/cobol/Password/libPassword.so –lmqicb

And I got this error:


* Micro Focus Cobsql Integrated Preprocessor

* CSQL-I-003: COBSQLTYPE is incorrect defaulting to ORACLE8

* CSQL-I-008: Invoking cp Preprocessor

* CSQL-I-018: Invoking Oracle Precompiler/Translator

 

System default option values taken from: /dados/OracleSDK/10.2.0l_64/precomp/adm

 

Error at line 4411, column 21 in file ISISMQA2.sks

           EXEC SQL EXECUTE

....................1

PCB-S-00008, Must use option SQLCHECK=SEMANTICS(FULL) when there is embedded PL/

SQL

* CSQL-F-016: UNIX error Return Code is 0001

cob64: error(s) in compilation: ISISMQA2.cbl

Mv CODE:

           EXEC SQL
                ALLOCATE :CURSOR-RETURN
           END-EXEC.
           MOVE 'ALLOC CURSOR-RETURN' TO AX-PROCEDURE.
           PERFORM XXX-INI-ERROR-SQL THRU XXX-fim-ERROR-SQL.
           
           EXEC SQL EXECUTE
              BEGIN
                OC.LISTA_PROP_ATIVA_OC_S1
                    (:NENT-NUM-CPF,
                     :CURSOR-RETURN);
               END;
           END-EXEC.
           MOVE 'CHAMADA STORED PROCEDURE' TO AX-PROCEDURE.
           PERFORM XXX-INI-ERROR-SQL THRU XXX-FIM-ERROR-SQL.
           
           EXEC SQL
                FETCH :CURSOR-RETURN
                INTO  :NDBL-CI-PROP-NBR,
                      :NDBL-CI-CUST-NBR,
                      :SDBL-CI-PROP-STAT-CODE
           END-EXEC.
           MOVE 'FETCH CURSOR-RETURN' TO AX-PROCEDURE.
           PERFORM XXX-INI-ERROR-SQL THRU XXX-FIM-ERROR-SQL.

Thank you !!


#COBOL
#semantics
#EXECSQLEXECUTE
#storedprocedure
#SQLCHECK
#Oracle

This compiler directive on the "cob" command line:

-p(cobsql)

Invokes the Micro Focus COBSQL preprocessor, which in turn invokes the Oracle preprocessor.   The error:

PCB-S-00008, Must use option SQLCHECK=SEMANTICS(FULL) when there is embedded PL/SQL

is actually being reported by the Oracle pre-processor.   The Oracle pre-processor recognizes this syntax:

EXEC SQL EXECUTE

as being PL/SQL.  The documentation for the Oracle pre-processor:

http://docs.oracle.com/cd/A97630_01/appdev.920/a96109/pco06pls.htm

Says:

You must specify SQLCHECK=SEMANTICS when precompiling a program with an embedded PL/SQL block

So, the solution seems to be, to pass the SQLCHECK=SEMANTICS option to the Oracle pre-processor.   The Micro Focus documentation says:

[example command line]

cob -C "preprocess(cobsql) csqltype==oracle end-c comp5==yes endp"

END-C and ENDP have the following effect:

Directives placed before END-C pass to COBSQL Directives placed between END-C and ENDP pass via COBSQL to the precompiler

So in the above, csqltype==oracle is an option passed to the COBSQL preprocessor, whereas comp5==yes is an option passed to the Oracle preprocessor.

Considering this information, please try syntax such as the following on your "cob" command line:

-C "p(cobsql) end-c SQLCHECK==SEMANTICS endp"

Note that the copy preprocessor p(cp) is not included in the above example.  It may work without the p(cp).  However, if there is some difficulty with COPY files using this syntax, let us know, and we'll find a way of also specifying the copy (cp) preprocessor.