我得到了一些奇怪的Pro-C程序行为,如下所示:
#define BGHCPY_TO_ORA(dest, source) \
{ \
(void)strcpy((void*)(dest).arr, (void*)(source)); \
(dest).len = strlen((const char *)(dest).arr); \
}
#define BGHCPY_FROM_ORA(dest, source) \
{ \
(void)memcpy((void*)(dest), (void*)(source).arr, (size_t)(source).len); \
(dest)[(source).len] = '\0'; \
}
long fnSQLMarkProcessed (char *pszRowId, char *pszMarker)
{
BGHCPY_TO_ORA (O_rowid_stack, pszRowId);
BGHCPY_TO_ORA (O_cust_processed, pszMarker);
EXEC SQL
UPDATE document_all
SET processed_by_bgh = :O_cust_processed
WHERE rowid = :O_rowid_stack;
return (sqlca.sqlcode);
}
Run Code Online (Sandbox Code Playgroud)
传递给上面函数的输入参数值是
pszRowId = [AAAF1lAAIAABOoRAAB], pszMarker=X
Run Code Online (Sandbox Code Playgroud)
查询返回错误代码:02115,并显示以下消息:
SQL Error:02115 Code interpretation problem -- check COMMON_NAME usage
Run Code Online (Sandbox Code Playgroud)
我使用Oracle作为后端数据库.
任何人都可以向我提供有关此查询失败的可能原因的信息吗?
任何帮助都非常感谢.
PRO-C编译期间使用的标志定义如下:
------/u01/app/oracle/product/8.1.6/ORACLE_HOME/bin/proc …Run Code Online (Sandbox Code Playgroud) 如何将记录从oracle移动到Cobol阵列?当我移动一个字段时,一切都按预期工作.当我尝试在Oracle VARRAY中移动记录时,我无法使其工作.PRO*COBOL预编译器给出以下错误消息:
Error at line 137, column 12 in file ESF3.ordbso07.PCO
EXEC SQL EXECUTE
...........1
PCB-S-00576, PLS-382: expression is of wrong type
Error at line 137, column 12 in file ESF3.ordbso07.PCO
EXEC SQL EXECUTE
...........1
PCB-S-00576, PLS-0: Statement ignored
Run Code Online (Sandbox Code Playgroud)
Oracle类型:
TYPE QDELSSRD_arr IS VARRAY(30) OF QDELSSRD_typ;
TYPE SODLSSRD_typ IS RECORD ( -- DBSO07 SOK
QDELSSRD QDELSSRD_arr -- 30 x QDELSSRD_typ
OC is SODLSSRD_typ;
TYPE QDELSSRD_typ IS RECORD (
ENAMN arbetssokande.efternamn%type, -- VARCHAR2(30 CHAR)
FNAMN arbetssokande.fornamn%type, -- VARCHAR2(20 CHAR)
);
Run Code Online (Sandbox Code Playgroud)
COBOL …
我正在学习数据库课程,我必须编写一个命令行应用程序.教授希望我们编写一个ESQL(嵌入式SQL)应用程序.
我觉得这种技术是折旧的.
我们必须使用oracle预编译器来翻译c ++中的esql代码.这种应用程序看起来很糟糕.
php应用程序也可以正常运行,但是他们可能希望命令行应用程序更快地进行分级(使用输入源进行单元测试).您认为,Embed SQL是业内使用的,是否值得请教教授做一个java应用程序?还有其他技术更合适吗?
在RPG中使用嵌入式SQL时,通常会使用游标和dow-loop来处理结果中的所有行.循环中的条件以某种方式依赖于SQLCOD和/或SQLSTTSQLRPGLE程序中的一些全局可用变量?
但检查这些值的正确方法是什么?有人建议SQLCOD = 0别人not (SQLCOD = +100 or SQLSTT = '02000').一个失败的所有警告,另一个没有失败的一些错误,所以我不满足.
为了说明我对一些代码的处理:
Pmain B
D PI
Dmy_ds E DS extname(SOME_TABLE)
D qualified
/free
exec sql
DECLARE cur CURSOR FOR
SELECT *
FROM some_table;
exec sql
OPEN cur;
exec sql
FETCH cur
INTO :my_ds;
dow sql_found();
exec sql
FETCH cur
INTO :my_ds;
enddo;
exec sql
CLOSE cur;
/end-free
Pmain E
Psql_found B
D PI N
/free
// insert return statement here... …Run Code Online (Sandbox Code Playgroud) 我试图在GnuCOBOL上从Oracle迁移到PostgreSQL.我有一段使用游标的代码,需要多次打开游标.但是,当我再次尝试打开光标时,我收到错误ERROR: cursor "fetchtbl_c1" already exists
IDENTIFICATION DIVISION.
PROGRAM-ID. FETCHTBL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 D-SOC-REC.
05 D-SOC-NO-1 PIC X(3).
05 FILLER PIC X.
05 D-SOC-NO-2 PIC X(3).
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 USERNAME PIC X(30) VALUE SPACE.
01 SOC-REC-VARS.
05 SOC-NO-1 PIC X(3).
05 SOC-NO-2 PIC X(3).
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.
PROCEDURE DIVISION.
MAIN-RTN.
MOVE SPACE TO USERNAME.
EXEC SQL
CONNECT :USERNAME
END-EXEC.
IF SQLCODE NOT = ZERO DISPLAY "ERROR …Run Code Online (Sandbox Code Playgroud) 以下是我写的一个sql查询,用于删除放置表中的所有记录,其中placement.op_number=返回记录的列表.
子查询单独工作正常,只返回OP_NUMBER列(有两行).
我得到的错误是:
子查询最多可以返回一条记录
DELETE
FROM PLACEMENT
WHERE PLACEMENT.OP_NUMBER = (SELECT OP_NUMBER
FROM Opening
WHERE opening.qual_code = "SEC-45");
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
好像我记得编写一个使用嵌入式SQL的RPG程序,只要发生SQL警告或错误,它就会向交互式用户作业日志写入消息.我没有明确写出来; 它默认记录.
我现在写的程序没有进行此日志记录,虽然我知道我可以引起类似警告01003和错误02000,并使用SQLState变量读取它们.
我不认为我想象这种行为.是否有我忘记设置的H spec关键字,我调用程序的方式(使用CALL交互式),我编写SELECT INTO语句的方式(静态而不是动态)?我对其他想法感到茫然.
embedded-sql ×7
cobol ×2
db2-400 ×2
oracle ×2
rpgle ×2
sql ×2
c ×1
database ×1
gnucobol ×1
ibm-midrange ×1
oracle-pro-c ×1
postgresql ×1
procobol ×1