lightdb23.3 ecpg支持多种注释方式

ecpg 支持多种注释方式

原版的pg只支持在 ecpg 的 EXEC SQL 中使用 ‘/**/’ 形式的注释,因为ecpg 会转换SQL, 把SQL 转换为一行,去掉了换行符,导致 ‘–’ 和 ‘//’ 这种行注释的使用会有问题。在oracle 的pro*c 中这两种注释都支持。

LightDB 在 23.3 版本支持在ecpg代码中使用 ‘–’ 和 ‘//’ 注释。案例如下:

    EXEC SQL
		Do $asa$ -- :abcdef
		declare
			val text := $$:ad--/*sds*/ds$$;
		begin
			begin 	// :abcdef
				-- :abcdef
				// :abcdef 
				// :abcdef --:abcdef
				--:abcdef // :abcdef

				update/*3631412 :abcdef*/ t1 set c = '--///**/C :v_id' where id = :v_id;

				if SQL%NOTFOUND then  -- :abcdef
						:iReturnCode = 1; // :abcdef 
				end if;
				:iReturnCode = 0;

				commit;
			end;
		end;
    $asa$ Language plorasql;

	exec sql create table t1(
		id integer, // id
		t text,  -- id
		d1 numeric, /* d1-- */
		d2 float8,
		c char(100));

在使用ecpg 程序转换时, 会把’–’ 和 ‘//’ 注释去掉。而’/**/’ 会保留在ECPGdo函数开头,具体如下所示:

    /*3631412 :abcdef*/{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "do $asa$ \
		declare\
			val text :=  $$:ad--/*sds*/ds$$ ;\
		begin\
			begin 					\
												\
\
				update  t1 set c =  '--///**/C :v_id'  where id =  $1  ;\
\
				if SQL%NOTFOUND then  \
						 $2   = 1; 				end if;\
				 $2   = 0;\
\
				commit;\
			end;\
		end;\
    $asa$  (INT, INT) using ($1, $2)  language plorasql", 
	ECPGt_int,&(v_id),(long)1,(long)1,sizeof(int), 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, 
	ECPGt_int,&(iReturnCode),(long)1,(long)1,sizeof(int), 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, 
	ECPGt_int,&(v_id),(long)1,(long)1,sizeof(int), 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, 
	ECPGt_int,&(iReturnCode),(long)1,(long)1,sizeof(int), 
	ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
    
	/* d1-- */{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 100 ) )", ECPGt_EOIT, ECPGt_EORT);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫无之紫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值