Dynamisches SQL unter MFCOBOL
Sequenz mit nextval holen
IDENTIFICATION DIVISION.
PROGRAM-ID. GETNEXTS.
AUTHOR. NEV.
DATE-WRITTEN. 24.11.2010.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE "SQLCA"
END-EXEC.
EXEC SQL
INCLUDE "system.error_codes"
END-EXEC.
EXEC SQL
INCLUDE "user.error_codes"
END-EXEC.
01 ARG-SQLCODE PIC S9(9) USAGE IS COMP VALUE IS 0.
01 ARG-SQLERRMC PIC X(79) VALUE IS SPACES.
01 XTRA-SQLCODE PIC S9(9) USAGE IS COMP VALUE IS 0.
01 XTRA-SQLERRMC PIC X(79) VALUE IS SPACES.
01 FAL-END-OF-PROGRAM-SWITCH PIC X IS EXTERNAL.
88 FAL-END-OF-PROGRAM VALUE IS "Y" FALSE IS "N".
01 FAL-DISPLAY-MESSAGE PIC X(1200).
01 FAL-SEVERITY PIC X(10) VALUE IS "WARNING".
01 FAL-PROG-ID PIC X(7) VALUE IS "SYSPARA".
01 FAL-CURRENT-PROC PIC X(80) VALUE IS SPACES.
01 FAL-NUMERIC-SEPARATORS PIC XX VALUE IS ".,".
01 FAL-CALLED-PROGRAM PIC X(310) VALUE IS "BAD-CALL".
01 FAL-DEBUG-USER PIC X IS EXTERNAL.
01 FAL-DEBUG-PROGRAM PIC X IS EXTERNAL.
01 FAL-DEBUG-TIMESTAMP.
03 FAL-DTS-HOURS PIC 99.
03 FAL-DTS-MINUTES PIC 99.
03 FAL-DTS-SECONDS PIC 99.
03 FAL-DTS-HUNDREDTHS PIC 99.
01 FAL-RETURN-CODE PIC S9(10).
* These are used for the Koala screen interface
@ INCLUDE "screens/koala-linkage.cpy" END-INCLUDE
@ INCLUDE "screens/koalasup-linkage.cpy" END-INCLUDE
@ INCLUDE "screens/koalacpt-linkage.cpy" END-INCLUDE
01 FAL-SCREEN-TIMER PIC 9(4) VALUE IS 0.
01 FAL-CURSOR-POS.
03 FAL-CP-COL PIC S9(4) USAGE IS BINARY.
03 FAL-CP-ROW PIC S9(4) USAGE IS BINARY.
* Bring in the transfer block used by the I/O modules
COPY "io-block.cpy".
01 FAL-MUST-INITIALIZE PIC X VALUE IS "Y".
LINKAGE SECTION.
01 SEQ_NAME PIC X(32).
01 SEQ_RET_VAL PIC 9(12).
PROCEDURE DIVISION USING seq_name, seq_ret_val.
VERARBEITUNG.
mbd EXEC SQL EXECUTE
mbd BEGIN
mbd :SEQ_RET_VAL :=
mbd GET_NEXT_SEQ(:SEQ_NAME);
mbd END;
mbd END-EXEC.
PL/SQL:
CREATE OR REPLACE function FVV.get_next_seq(p_seq varchar2) return number is
sql_stat varchar2(2000);
ret_next_val number;
begin
sql_stat := 'SELECT '||rtrim(p_seq)||'.nextval FROM dual';
EXECUTE IMMEDIATE sql_stat INTO ret_next_val;
return ret_next_val;
end;
/