吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1035|回复: 6
收起左侧

[求助] sql

[复制链接]
yk156511 发表于 2022-4-22 16:17
请教下各位大神,巨佬, PLSQL 里面要写一个游标更新的话。

想用这种形式能实现吗,如果可以,请问怎么执行啊

从A表取a字段,从B表取b字段。  
v_s:=update table set a=1 where b=2


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

安卓iphone 发表于 2022-4-22 17:09
整段垮掉
Todd 发表于 2022-4-22 17:44
本帖最后由 Todd 于 2022-4-22 17:45 编辑

首先 a、b 两张表肯定有关联关系的吧
可以参考  

update a
set a.xxx = b.yyy
from b
where  a和b的关联条件 以及 b的过滤条件
具体可以参考

https://www.cnblogs.com/xuenb/p/8385973.html
天下有道 发表于 2022-4-22 18:48
首先前提是两表有关联字段,例如ID,才能A表取B表的某个字段
Hmily 发表于 2022-4-22 21:23
你这标题改改吧,提问都不会好好描述下标题?
sphinx_young 发表于 2022-5-6 11:25
excute statement
sphinx_young 发表于 2022-5-6 11:31
鉴于你的需求描述的不是很清楚,使用exctue statement可研解决你的问题,稍微研究调试一下就行。

EXECUTE STATEMENT语句是一个动态执行的sql语句的语句,用在存储过程与触发器中.他相当于MS SQLSERVER中的exec 语句,不过他比该语句用法丰富,在ms sql中如要实现后面两种EXECUTE STATEMENT语句的功能,必须用exec +游标来实现.他有三种典型的用法.
第一种:语法如下:EXECUTE STATEMENT <string>;
<string>就指是sql语句.
样例如下:
CREATE PROCEDURE DynamicSampleOne (Pname VARCHAR(100))
AS
DECLARE VARIABLE Sql VARCHAR(1024);--定义字符型变量,长度1024
DECLARE VARIABLE Par INTEGER;--定义整形变量Par
BEGIN
SELECT MIN(SomeField) FROM SomeTable INTO :Par;--把Sometalbe中somefied最小值的列---赋给par
Sql = ’EXECUTE PROCEDURE ’ || Pname || ’(’;
Sql = Sql || CAST(Par AS VARCHAR(20)) || ’)’;
EXECUTE STATEMENT Sql;--把存储过程名当参数来动态执行
END

第二种,语法如下:
EXECUTE STATEMENT <string> INTO :var1, […, :varn] ;
举个例子,我自已写的一个过程用的:
CREATE PROCEDURE FIN_FUN0021 (
  TABLENAME VARCHAR(20))--传入表名
RETURNS (
  NEWKEY BIGINT)--返回这个表的主K的最新值(我建的表所有的主K都有整形)
AS
DECLARE VARIABLE BASNUM INTEGER;
DECLARE VARIABLE CURRSHOPID INTEGER;
DECLARE VARIABLE STRMK VARCHAR(50);
DECLARE VARIABLE NEWMAXKEY BIGINT;
DECLARE VARIABLE STRSQL VARCHAR(250);
BEGIN
execute procedure FIN_FUN0026('BASNUM') Returning_values (BASNUM);--增长的步长
execute procedure FIN_FUN0026('SHOPID') Returning_values (CurrShopID); --分店号

/*得到传来的表格的主K名*/
select first 1 A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B
   WHERE B.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
   AND UPPER(B.RDB$RELATION_NAME) = UPPER(:TableName)
   AND A.RDB$INDEX_NAME = B.RDB$INDEX_NAME
  ORDER BY A.RDB$FIELD_POSITION into :STRMK;
  if (STRMK IS NOT NULL) then -- 为防止没有主K的情形出现。
BEGIN
    STRMK=uf_trim(STRMK);--uf_trim为主定义函数,相当于delphi的trim
  /*得到当前主K的最大值 */
  STRSQL='SELECT CAST(MAX(' ||STRMK|| ')' ||' AS bigint) from ' ||TableName ;
  execute STATEMENT STRSQL INTO :NewMaxKey ;
  if(NewMaxKey is NULL) then --如果主K是空值
  begin
   NEWKEY = CURRSHOPID;
  end
  else --不是空的.
   NEWKEY = NewMaxkey+BASNUM;
END
  SUSPEND;
END
第三种形式:语法:
FOR EXECUTE STATEMENT <string> INTO :var1, …, :varn DO
<compound-statement>;
例子:
/*传入表与广本字段,得到该表中该字段的所有数据*/
CREATE PROCEDURE DynamicSampleThree (
TextField VARCHAR(100),
TableName VARCHAR(100))
RETURNS (Line VARCHAR(32000))
AS
DECLARE VARIABLE OneLine VARCHAR(100);
BEGIN
Line = ’’;
FOR EXECUTE STATEMENT
’SELECT ’ || TextField || ’ FROM ’ || TableName INTO :OneLine
DO
IF (OneLine IS NOT NULL) THEN
Line = Line || OneLine || ’ ’;
SUSPEND;
END
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表