0

我的 oracle 数据库中有一个包,我需要从 ANSI-C 服务调用,该服务位于燕尾服环境中。

我已经将整个事情调试到最后一行。我对调试的意思是它一直在进行核心转储,但这是固定的。所以这是我要运行的代码。

问题 以下陈述有什么问题?这给了我一个ORAERR - 6550这又是一个PL/SQL 编译错误

变量

VARCHAR sql_sats[500];
EXEC SQL BEGIN DECLARE SECTION;
short i_slask;

long id_session_sql;
long id_pdb_journal_typ_sql;
long id_pdb_journal_sql_ut;
long id_pers_sql;

char id_objekt_sql[200];
char objektsbeskrivning_sql[200];

EXEC SQL VAR id_objekt_sql IS STRING;
EXEC SQL VAR objektsbeskrivning_sql IS STRING;

EXEC SQL END DECLARE SECTION;

//SET VALUES!
id_session_sql = 123;
strcpy(id_objekt_sql, "54582");
id_pers_sql = atoi("111111111111");
strcpy(objektsbeskrivning_sql, "ID_ANST");
id_pdb_journal_typ_sql = 999;


strcpy(sql_sats.arr,                        
" BEGIN                                                             "                   
" id_pdb_journal_sql_ut :=  PKG_JOURNAL.F_PO_SKAPA_JOURNAL_INIT (   "
"   :id_session_sql,                                                "
"   :id_objekt_sql,                                                 "
"   :id_pers_sql,                                                   "
"   :objektsbeskrivning_sql,                                        "
"   :id_pdb_journal_typ_sql                                         "
"   );                                                              "
" END;                                                              "
"); //END STRCPY

sql_sats.len = strlen(sql_sats.arr);

EXEC SQL PREPARE sql_sats_sql FROM :sql_sats;

EXEC SQL EXECUTE sql_sats_sql USING :id_session_sql, :id_objekt_sql,
     :id_pers_sql, :objektsbeskrivning_sql, :id_pdb_journal_typ_sql;
4

2 回答 2

3

看起来你没有声明你的变量id_pdb_journal_sql_ut

DECLARE
  id_pdb_journal_sql_ut  <TYPE>;
BEGIN
  id_pdb_journal_sql_ut :=  PKG_JOURNAL.F_PO_SKAPA_JOURNAL_INIT (
  [...]
于 2013-11-05T17:31:27.003 回答
2

您正在为 赋值id_pdb_journal_sql_ut,但这并未在 PL/SQL 中声明;因此出现 PL/SQL 编译错误也就不足为奇了。那是编译您正在运行的匿名块,而不是您正在调用的函数(或其包)。

既然你有一个long同名的,我猜你的意思是它是一个绑定变量:

strcpy(sql_sats.arr,                        
" BEGIN                                                             "
" :id_pdb_journal_sql_ut :=  PKG_JOURNAL.F_PO_SKAPA_JOURNAL_INIT (  "
"   :id_session_sql,                                                "
"   :id_objekt_sql,                                                 "
"   :id_pers_sql,                                                   "
"   :objektsbeskrivning_sql,                                        "
"   :id_pdb_journal_typ_sql                                         "
"   );                                                              "
" END;                                                              "
); //END STRCPY

...

EXEC SQL EXECUTE sql_sats_sql USING :id_pdb_journal_sql_ut, :id_session_sql,
    :id_objekt_sql, :id_pers_sql, :objektsbeskrivning_sql,
    :id_pdb_journal_typ_sql;

您的 . 末尾还有一个额外的双引号strcpy,但这会阻止它编译,所以希望在您创建这个问题时已经介绍了这一点。

如果包和它的函数被声明为它们看起来的样子,那么它编译并运行正常。

于 2013-11-05T17:33:50.447 回答