LightDB ecpg 支持 exec sql execute ... end-exec【24.1】【oracle 兼容】

这篇具有很好参考价值的文章主要介绍了LightDB ecpg 支持 exec sql execute ... end-exec【24.1】【oracle 兼容】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LightDB 从24.1 版本开始支持 oracle pro*c 中执行匿名块的语法(之前可以通过do 语句执行匿名块):

EXEC SQL EXECUTE
	anonymous block
END-EXEC;

因为匿名块不是SQL标准的一部分,所以此用法也不存在于SQL标准中。

示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void
print_sqlca()
{
    fprintf(stderr, "==== sqlca ====\n");
    fprintf(stderr, "sqlcode: %ld\n", sqlca.sqlcode);
    fprintf(stderr, "sqlerrm.sqlerrml: %d\n", sqlca.sqlerrm.sqlerrml);
    fprintf(stderr, "sqlerrm.sqlerrmc: %s\n", sqlca.sqlerrm.sqlerrmc);
    fprintf(stderr, "sqlstate: %5s\n", sqlca.sqlstate);
    fprintf(stderr, "===============\n");
}

int main() {
	exec sql begin declare section;
	char c_val[2000] = {0};
	exec sql end declare section;

	ECPGdebug(1, stderr);
	EXEC SQL CONNECT TO tcp:postgresql://127.0.0.1:5432/test_o;

	EXEC SQL SET AUTOCOMMIT TO ON;
	EXEC SQL WHENEVER SQLWARNING SQLPRINT;
	EXEC SQL WHENEVER SQLERROR CALL print_sqlca();

	exec sql create table t1(
					id integer,
					t text,
					d1 numeric,
					d2 float8,
					c char(10));
	exec sql insert into t1 values
					(1, 'a', 1.0, 1, 'a'),
					(2, null, null, null, null),
					(4, 'd', 4.0, 4, 'd');

	exec sql execute
	  begin
		update t1 set c ='aa' where id = 2 return c into :c_val;
		end;
	end-exec;

	EXEC SQL EXECUTE
		BEGIN
			:c_val:=dbms_metadata.get_ddl('TABLE', 'T1');
		END;
	END-EXEC;
	
	EXEC SQL DROP table t1;


	exec sql disconnect;
	return 0;
}

Note

需要注意的是由于内部实现方式的原因,在匿名块中不能使用 $AnonBlockStmt$,示例如下:文章来源地址https://www.toymoban.com/news/detail-839920.html

	EXEC SQL EXECUTE
			declare
				val text := $AnonBlockStmt$'$-/:ad--/*sds*/ds$AnonBlockStmt$;
			begin
				begin
					update t1 set c = '-$--///**/C :test_int[0]' where id = :test_int[0];

					if SQL%NOTFOUND then
							:iReturnCode = 1;
							rollback;
					end if;
					:iReturnCode = 0;
					commit;
				end;
			end;
	END-EXEC;

到了这里,关于LightDB ecpg 支持 exec sql execute ... end-exec【24.1】【oracle 兼容】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • lightdb 支持兼容Oracle的to_clob函数

    在信创移植的SQL语句中,有来源于Oracle数据库的SQL语句。 在ORACLE PL/SQL包中,你可以使用TO_CLOB(character)函数将RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB值转换为CLOB。 因此在LightDB 23.3版本中实现了对TO_CLOB函数的支持。 环境准备 使用TO_CLOB函数 可以看出,在Oracle兼容模式下

    2024年02月10日
    浏览(46)
  • 云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

    目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd)  5.master2节点迁移容器运行时(docker → containerd)  6.node1节点容器运行时迁移(docker → containerd)  7.升级集群计划(v1.23.14 → v1.24.1) 8.升级master1节点版本(v1.24.1) 9.升级master2节点版本

    2024年02月03日
    浏览(68)
  • exec failed: unable to start container process: exec: “ip“: executable file not found in $PATH

    问题报错: 报错原因:因为该容器的镜像时精简版,内部缺少iproute2导致无法使用ip命令 解决方式: 进入容器 docker exec -it 容器名 /bin/bash 进入后: 更新apt apt-get update 安装iproute2 agt install -y iproute2 安装完以后退出exit docker exec -it 容器名 ip addr  修改后尝试结果: 同理  安装

    2024年02月13日
    浏览(52)
  • exec: “java“: executable file not found in $PATH: unknown错误处理

    kubesphere部署springboot项目时,出现下边错误信息 exec: \\\"java\\\": executable file not found in $PATH: unknown 原因: 本来是从docker仓库取镜像,所以源头应该是docker镜像打包时出的问题 处理方式: 修改dockerfile的ENTRYPOINT值: 然后重新发布就可以了

    2024年02月16日
    浏览(38)
  • 网络安全实训Day24(End)

    写在前面 并没有完整上完四个星期,老师已经趁着清明节假期的东风跑掉了。可以很明显地看出这次持续了“四个星期”实训的知识体系并不完整,内容也只能算是一次基础的“复习”。更多的内容还是靠自己继续自学吧。 网络空间安全实训-渗透测试 定义 利用页面中incl

    2024年04月27日
    浏览(31)
  • 学习狂神docker报错解决:exec failed: unable to start container process: exec: “ip“: executable file not found

    问题:最近学习狂神的docker,34节,网络详解。下载tomcat镜像并启动成功。如图  在使用命令:   docker exec -it tomcat01 ip addr 查看容器ip地址时报错:OCI runtime exec failed: exec failed: unable to start container process: exec: \\\"ip\\\": executable file not found in $PATH: unknown  解决方案:安装工具 iproute

    2024年02月12日
    浏览(44)
  • lua中执行luci.sys.call、luci.sys.exec、os.execute的区别

    相同点:都是调用Linux底层脚本及程序 不同点: (1)luci.sys.call(command) 脾气捉摸不透,实际使用有些时候没有得到任何状态或数据返回,纯粹被用了一下。 (2)luci.sys.exec(command) 比较可靠,可以返回标准输出,比如 value = luci.sys.exec(command) 获取执行结果用作参量。 message =

    2024年02月13日
    浏览(59)
  • Linux中执行java命令报错:cannot execute binary file: Exec format error

    对于这个问题,如果你确认文件没有损坏、文件权限正确、服务器位数和JDK位数一致,那么本文99.999999%可以解决你的问题。 Java程序在自己的开发环境、测试环境,一切正常,启动命令如下: 某天,终于要在客户的生产环境进行部署了。一切都很愉快,现在万事俱备,只差启

    2024年02月04日
    浏览(47)
  • 我在使用arduino编译时报错:exec: “cmd“: executable file not found in %PATH%

    真是气死我了,第一次因为一个错误搞半天,所以在这里把答案告诉大家,省的和我一样烦躁 我遇到了exec: “cmd”: executable file not found in %PATH%这个报错,然后使用的的板子是esp32,之前8266没有遇到这样的错误,找了好多答案都是说在环境变量path里加入“C:WindowsSystem32cmd.

    2024年02月14日
    浏览(32)
  • windows搭建git服务器 无法识别 ‘git‘ 命令:exec: “git“: executable file not found in %PATH%

    无法识别 \\\'git\\\' 命令:exec: \\\"git\\\": executable file not found in %PATH% 确保已经安装git,如下图配置环境变量即可。   如果包以下错误,可能是由于没有新建data文件夹:

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包