天天看點

達夢Proc*連接配接DM8調用自定義函數并接受傳回值用例前言return函數的用例測試return+out參數函數的用例測試

前言

  • 因達夢手冊《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