返回首页

gbase数据、南大通用产品文档:GBase8s使用EXECUTE IMMEDIATE

更新日期:2024年09月11日

EXECUTE IMMEDIATE支持DDL、DCL、DML以及单行SELECT语句,不支持结果集为
多行的查询语句。

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 118 -

如果动态SQL语句包含绑定变量占位符,则每个占位符必须在EXECTURE IMMEDIATE
语句的USING子句有对应的绑定变量。用USING 定义输入变量,USING子句不能使用NULL
作为变量。为了解决此限制,在需要使用NULL的地方使用无初始化的变量来替代。USING
子句不支持select语句。不要有SQL引擎不支持类型的绑定变量。
语法:
EXECUTE IMMEDIATE ---动态SQL的起始标示,表示是动态SQL调用
SQL 子句 ---动态SQL语句
方式1:提前声明一个SQL语句
方式2:可以通过’’添加SQL语句
USING 子句 ---用于定义输入变量
例子
l
提前声明SQL的例子
CREATE OR REPLACE PROCEDURE pro1 AS
sql1 VARCHAR (100);
ret1 VARCHAR (20);
BEGIN
sql1 := 'UPDATE emp SET col=? where id=? '; --提前声明SQL语句
EXECUTE IMMEDIATE sql1 USING 'zhangsan-q',100;
DBMS_OUTPUT.PUT_LINE(ret1);
END;

l
通过’’添加SQL语句例子
CREATE OR REPLACE PROCEDURE pro1 AS
sql1 VARCHAR (100);
ret1 VARCHAR (20);
BEGIN
EXECUTE IMMEDIATE 'UPDATE emp SET col=? where id=? ' USING 'zhangsan-q',100;
DBMS_OUTPUT.PUT_LINE(ret1);
END;

l
使用USING子句的例子
DROP TABLE IF EXISTS emp2;
CREATE TABLE emp2(col1 VARCHAR(20),col2 INT);

DROP PROCEDURE IF EXISTS pro2;
CREATE or REPLACE PROCEDURE pro2(v_col1 varchar(20),v_col2 INT) AS

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 119 -

BEGIN
EXECUTE IMMEDIATE 'INSERT INTO emp2 VALUES(?, ?)' USING v_col1, v_col2;
END;

CALLl pro2( '2232',100);

操作步骤
步骤1:在所有节点执行集群服务停止命令。
$ gcluster_services all stop
Stopping gcrecover :
[
OK
]
Stopping gcluster :
[
OK
]
Stopping gbase :
[
OK
]
Stopping syncserver :
[
OK
]
$ gcware_services all stop
Stopping GCWareMonit success!
Stopping gcware :
[
OK
]

 摘要:
以整数形式返回服务器的版本号。
 语法:
unsigned long
gbase_get_server_version(GBASE *gbase);
 参数:
 返回值:
以数据形式返回服务器版本