Tag: oci

使用Ocilib时填充字符串缓冲区

我正在使用Ocilib在Oracle数据库上执行批量插入,但是在填充字符串缓冲区时遇到了一些麻烦。 文件说: 对于字符串/ RAW数组,输入数组必须是连续的数据块而不是指针数组。 因此,要为varchar2(30)列绑定10个元素的数组,binded变量必须是类似的数组[10] [31] 然后一个样本继续填充这样的缓冲区: … char tab_str[1000][21]; … OCI_BindArrayOfStrings(st, “:s”, (char*) tab_str, 20, 0); … for(i=0;i<1000;i++) { sprintf(tab_str[i],"Name %d",i+1); } … 我正在尝试填充字符串缓冲区,同时循环通过MyClass的std :: vector。 MyClass有一个std :: string成员。 我正在尝试使用std :: string :: copy方法将字符串内容复制到缓冲区。 但我不知道如何索引缓冲区来做到这一点。 … OCI_BindArrayOfStrings(st, “:f2”, NULL, VCHAR_SIZE, 0); char** vc_buffer = (char**)OCI_BindGetData(OCI_GetBind(st, 2)); … int i = 0; for(vector::const_iterator it = […]

编译OCILIB OCI包装库的问题

我正在尝试在ocilib3.8.1/demo编译ocilib3.8.1/demo 。 在成功安装了ocilib库之后,我在下面编译了demo source conn.c: #include “ocilib.h” int main(void) { OCI_Connection *cn; if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT)) return EXIT_FAILURE; cn = OCI_ConnectionCreate(“db”, “usr”, “pwd”, OCI_SESSION_DEFAULT); printf(“Server major version : %i\n”, OCI_GetServerMajorVersion(cn)); printf(“Server minor version : %i\n”, OCI_GetServerMinorVersion(cn)); printf(“Server revision version : %i\n\n”, OCI_GetServerRevisionVersion(cn)); printf(“Connection version : %i\n\n”, OCI_GetVersionConnection(cn)); OCI_Cleanup(); return EXIT_SUCCESS; } 使用gcc编译: $gcc -Wall conn.c […]

如何从OCI调用ORACLE函数?

我可以通过构造命令的SQL命令在C程序中通过OCI调用ORACLE存储过程,这里是我的代码的简短片段: /* build sql statement calling stored procedure */ strcpy ( sql_stmt, “call get_tab_info(:x)” ); rc = OCIStmtPrepare(p_sql, p_err, sql_stmt, (ub4) strlen (sql_stmt), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT); 但是如何使用以下签名构建对ORACLE函数的调用(在我的C程序中): CREATE OR REPLACE FUNCTION get_seq_number (p_table_name IN VARCHAR2, p_seq_type IN VARCHAR2) RETURN NUMBER IS 要在PL / SQL中调用该函数,我会使用例如: v_seq := get_seq_number(v_tabname, v_seqtype); 如何构造SQL字符数组(sql_stmt)来调用我的C程序中的ORACLE函数?

适用于SIGSEGV / SIGABRT和朋友的Oracle Pro * C / OCI安装处理程序 – 为什么以及如何禁用?

当使用Pro * C(Oracle for C-Code的嵌入式SQL预处理器)或OCI时,我注意到connect / init例程安装了一些信号处理程序。 这意味着之前 EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbspec ; 或者a OCIEnvNlsCreate() 我可以validation,例如这些信号有以下处理程序: No NAME Pointer SA_SIGINFO SIG_DFL SIG_IGN ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― 1 SIGHUP (nil) false true false 2 SIGINT (nil) false true false 3 SIGQUIT (nil) false true false 4 SIGILL (nil) false true false 5 SIGTRAP (nil) […]