前言
- 因達夢手冊《DM8_PROC使用手冊.pdf》沒有調用函數的測試用例,随後進行測試整理
- 代碼中使用的DM8資料庫版本為1.2.138。
return函數的用例測試
資料庫SQL
CREATE or replace FUNCTION "SYSDBA"."FUNC_RETURN_DEMO"("STR_IN" IN VARCHAR(50))
RETURN INT
AS
VARNAME INT;
BEGIN
return STR_IN;
END;
PC檔案
/* test.pc */
#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE SQLDA;
/*宿主變量的定義 */
EXEC SQL BEGIN DECLARE SECTION;
char username[20],password[20],servername[20];
int func_return_val;
int func_outParm_val;
EXEC SQL END DECLARE SECTION;
void main(void)
{
char *username = "SYSDBA";
char *password = "SYSDBA";
char *servername = "127.0.0.1:5236";
/*登入資料庫*/
EXEC SQL LOGIN :username PASSWORD :password SERVER :servername;
EXEC SQL EXECUTE
begin
:func_return_val := FUNC_RETURN_DEMO(222);
end;
END-EXEC;
printf("\n 函數傳回值: %d\n", func_return_val);
/*退出資料庫*/
EXEC SQL LOGOUT;
}
編譯流程
[[email protected] proc_func_demo]# /opt/dmdbms/bin/dpc_new FILE=/opt/proc_func_demo/call_func_demo.pc MODE=ORACLE TYPE_MODE=ORACLE CHAR_MAP=STRING UNSAFE_NULL=Y
[[email protected] proc_func_demo]# gcc -w -g -o ./testDMProc ./call_func_demo.c -I /opt/dmdbms/include -rdynamic -ldl -lstdc++ -Wl,-rpath,. -DDBENGINE_IS_ESQL -DDATABASE_IS_ORACLE -DDM64 -DOS_IS_LINUX -DDATABASE_IS_DMPROC -L. -ldl -L"/opt/proc_test_20221121/armLib/bin" -ldmdcp -ldmdpc -lpthread
[[email protected] proc_func_demo]# ll
總用量 32
-rw-r--r-- 1 root root 2547 2月 1 14:16 call_func_demo.c
-rw-r--r-- 1 root root 694 2月 1 14:16 call_func_demo.pc
-rwxr-xr-x 1 root root 75040 2月 1 14:16 testDMProc
[[email protected] proc_func_demo]# ./testDMProc
函數傳回值: 222
return+out參數函數的用例測試
資料庫SQL
CREATE FUNCTION "SYSDBA"."FUNC_RETURN_DEMO1"("STR_IN" IN VARCHAR(50),"STR_OUT" OUT INT)
RETURN INT
AS
VARNAME INT;
BEGIN
STR_OUT :=STR_IN+1;
return STR_IN;
END;
PC檔案
/* test.pc */
#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE SQLDA;
/*宿主變量的定義 */
EXEC SQL BEGIN DECLARE SECTION;
char username[20],password[20],servername[20];
int func_return_val;
int func_outParm_val;
EXEC SQL END DECLARE SECTION;
void main(void)
{
char *username = "SYSDBA";
char *password = "SYSDBA";
char *servername = "127.0.0.1:5236";
/*登入資料庫*/
EXEC SQL LOGIN :username PASSWORD :password SERVER :servername;
EXEC SQL EXECUTE
begin
:func_return_val := FUNC_RETURN_DEMO1(111,:func_outParm_val);
end;
END-EXEC;
printf("\n 函數retirn值: %d\n", func_return_val);
printf("\n 函數out值: %d\n", func_outParm_val);
/*退出資料庫*/
EXEC SQL LOGOUT;
}
編譯流程
[[email protected] proc_func_demo]# /opt/dmdbms/bin/dpc_new FILE=/opt/proc_func_demo/call_func_out_demo.pc MODE=ORACLE TYPE_MODE=ORACLE CHAR_MAP=STRING UNSAFE_NULL=Y
[[email protected] proc_func_demo]# ll
總用量 40
-rw-r--r-- 1 root root 2741 2月 1 14:27 call_func_out_demo.c
-rw-r--r-- 1 root root 765 2月 1 14:26 call_func_out_demo.pc
-rwxr-xr-x 1 root root 75024 2月 1 14:17 testDMProc
[[email protected] proc_func_demo]# gcc -w -g -o ./testDMProc ./call_func_out_demo.c -I /opt/dmdbms/include -rdynamic -ldl -lstdc++ -Wl,-rpath,. -DDBENGINE_IS_ESQL -DDATABASE_IS_ORACLE -DDM64 -DOS_IS_LINUX -DDATABASE_IS_DMPROC -L. -ldl -L"/opt/proc_test_20221121/armLib/bin" -ldmdcp -ldmdpc -lpthread
[[email protected] proc_func_demo]# ./testDMProc
函數retirn值: 111
函數out值: 112