达梦数据库更新语句包含单引号双引号引起执行失败解决方法全网唯一
如果一个更新的UPDATE更新语句的内容包含单引号’,会引起执行错误! 错误的类型不止这一种,但是都是因为内容里面包含转义字符单引号引起
解决方法一:外部单引号 内部数据单引号替换为双引号
把SQL里面内容人工调整成一行
update test1 set nasen='select * FROM a WHERE NAME="NASEN"'
解决方法二:外部同意用单引号,内部采用REPLACE函数实现转义
把SQL里面内容人工调整成一行
SELECT REPLACE('select * from nasen where name="{var}"','"','''')
update test1 set createSql=REPLACE('select * from nasen where name="{aasda}"','"','''') where id=35;
这种方法就实现了遇到更新语句包含单引号导致执行失败的问题了
三、达梦8怎么实现MYSQL的ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’
我们实际工作中会用到业务用到当数据被修改的时候同时记录当前修改的时间,在MYSQL的时候用到
gxsj` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
达梦在达梦8怎么实现呢这里用到触发器实现
1、我们建一个测试的表
CREATE TABLE "nasen_test"("ID" BIGINT NOT NULL,"SCSJ" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP() NOT NULL,"STATUS" INT NOT NULL,"GXSJ" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP() NOT NULL,CONSTRAINT "CONS1342711" NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
2、添加触发器到"GXSJ"这个字段上
CREATE OR REPLACE TRIGGER nasen_test_triggerBEFORE UPDATE ON nasen_testFOR EACH ROWBEGIN:new.GXSJ=CURRENT_TIMESTAMP();END;
3、插入测试数据,并执行一个更新语句更新某一个字段测试然后看GXSJ字段是否取当前执行语句的时间即可
update nasen_test set STATUS =2 WHERE ID=1;
四、查看当前被锁堵塞的信息
SELECT SYSDATE STATTIME,DATEDIFF(SS,S1.LAST_SEND_TIME,SYSDATE) SS,'被阻塞的信息' WT,S1.SESS_ID WT_SESS_ID,S1.SQL_TEXT WT_SQL_TEXT,S1.STATE WT_STATE,S1.TRX_ID WT_TRX_ID,S1.USER_NAME WT_USER_NAME,S1.CLNT_IP WT_CLNT_IP,S1.APPNAME WT_APPNAME,S1.LAST_SEND_TIME WT_LAST_SEND_TIME,'引起阻塞的信息' FM,S2.SESS_ID FM_SESS_ID,S2.SQL_TEXT FM_SQL_TEXT,S2.STATE FM_STATE,S2.TRX_ID FM_TRX_ID,S2.USER_NAME FM_USER_NAME,S2.CLNT_IP FM_CLNT_IP,S2.APPNAME FM_APPNAME,S2.LAST_SEND_TIME FM_LAST_SEND_TIMEFROM V$SESSIONS S1,V$SESSIONS S2,V$TRXWAIT WWHERE S1.TRX_ID=W.IDAND S2.TRX_ID=W.WAIT_FOR_ID;
五、查询某个表的所有会话并杀掉解锁
select DISTINCT c.SESS_ID from v$lock aleft join sysobjects b on b.ID=a.TABLE_IDleft join v$sessions c on a.TRX_ID=c.TRX_IDwhere name = '表名称';
sp_close_session(35451965760);#里面是数字就是sessionid