sqlupdatefor
Ⅰ sql 中UPDATE用法
Update是一个数据库SQL语法用语,用途是更新表中原有数据,单独使用时使用where匹配字段。
语法为:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
例如:Update table_name Set column_name = new_value Where column_name = some_value
(1)sqlupdatefor扩展阅读
update使用注意事项:
1、sp_updatestats可以更新统计信息到最新。
2、低内存会导致未被客户端连接的查询计划被清除。
3、修改表结构,修改索引后,查询计划会被清除,可以再修改后运行几遍查询。
4、使用update时候,order by 会影响查询速度,where中使用函数则会调用筛选器进行扫描,扫描表要尽量避免。
参考资料来源:网络—update
Ⅱ plsql的for update
使用了plsql的自动替换功能。
请按照如下步骤修改设置:
1. 菜单中找到 Tools--preferences
2. 在左侧列表中选择“Editor”
3. 在右侧配置中找到“AutoReplace”这一项
4.点击 Edit 按钮,删除其中的所有文本
5. 点击OK,结束设置
6. 重启Plsql,这样就不会出现上述的自动替换了
Ⅲ sql 后面跟 for update 什么意思
这是plsql中特有的,用于修改非批量的数据。
执行完sql语句后,点红框中的锁的图标,就可以修改数据了
Ⅳ pl/sql 中 for update 问题
个人发现的大概是四点吧
1.是不是r_Record没有定义为r_Record c_tb1_1%rowtype;的原因。
2.是不是游标SELECT语句里使用了别名的缘故,游标里的查询测试过没,有没有问题。
3.就是用到WHERE CURRENT OF的时候,两张表的话需要指定FOR UPDATE OF R1.FIRST ,R2.FIRST;
4.但是两张表的情况UPDATE 一张表WHERE CURRENT OF就要出错,试试UPDATE两张表,用替代触发器更新多表视图看看?
你看看这里http://www.itpub.net/thread-937399-1-1.html同样的问题。
以前没遇到过WHERE CURRENT OF的问题,以前只知道有个FOR UPDATE的,今天刚好学习学习哈哈。貌似这个是新特性还是什么,WHERE CURRENT OF要用在释放游标前,网上好多这方面的资料都是E文的,现在在出差不方便试验,回去再试验看看,楼主你要有结论了回复下哈。
create or replace procere XXXXXXXX
--这里的XXXXXXX()括号里面应该有定义输入或者输出参数的
is
--下面是定义一个游标,SELECT语句是一个查询,你单独测试下这个查询看看有问题没
--游标里面查询语句含AS同义词不知道会不会有问题
cursor c_tbl_1 is
SELECT
R1.FIRST,
TO_CHAR(ADD_MONTHS(TO_DATE(R1.TIME,'YYYYMM'),1),'YYYYMM') AS SECOND,
R2.YEAR AS THIRD
FROM
A R1
INNER JOIN
B R2
ON
R2.FIRST = R1.FIRST
AND R2.TIME = TO_CHAR(ADD_MONTHS(TO_DATE(R1.TIME,'YYYYMM'),1),'YYYYMM')
FOR UPDATE OF R1.FIRST,R2.FIRST; --这里有修改加了个字段
--如果r_Record没有定义,那么需要指明r_Record c_tb1_1%rowtype
r_Record c_tb1_1%rowtype;--添加的语句。
begin
for r_Record in c_tbl_1 loop --r_Record没有定义
UPDATE A
SET
TIME = r_Record.SECOND,
YEAR = r_Record.THIRD
WHERE CURRENT OF c_tbl_1;
--上面的FOR UPDATE是双表,这里UPDATE是单表出问题的吧。
end loop;
commit;
exception
when others then
rollback;
end XXXXXXXX;
Ⅳ pl/sql 很简单的一句for update 一直处在执行中
查看是否已经被别人锁表,锁表情况下肯定做不了update
你的forupdate数据量有没有很大,数据量很大会执行很长时间
Ⅵ select语句后以for update结尾是什么意思
可以对这段返回的结果集进行修改
虽说实际上是这样,但是操作中是不允许有复杂(聚合、联接)计算的,一般只是select 一张表,充其量加上些where语句,然后就可以进行修改数据,修改完成后可以commit
从原理上来说 for update就是一中并发性的行级锁机制,要叙述需要很大篇幅,具体可以网络
Ⅶ sql 关于 for update 的问题
update 用法是:
update table a, table (select distinct * from (select K_KPBH as K_KPBH,max(K_BGXH) as K_BGXH from ZC_KPXXB where K_KPBH in (select www from lp234) group by K_KPBH) a left outer join ZC_KPXXB b on a.K_KPBH=b.K_KPBH and a.K_BGXH=b.K_BGXH) b set a.XX = b.XX where a.YY = b.YY
Ⅷ 使用PHP语言向SQL中的一个表update多条记录,使用for循环语句只能更新最后一条信息,请问应该怎么写语句
你是想实现什么?是要把指定的记录更新成一样的?还是更新的每天数据的值都不一样?我这有集中解决思路:
a)建议你面向对象的方式写,把更新的过程(语句)写进了function里(也可以不用写,直接执行sql语句),再在for循环内层调用,这样就会相当于批量执行,这样想更新数据,就要根据for循环的数组中的值而确定。如这样:
$arr=array('desetang','d.n.sky','time');
for($i=0;$i<count($arr);$i++){
//update 语句或过程
$a=sqlupdate('表名';所选字段';'条件','更新内容$arr[$i]');//这是我举得例子
}
b)在调试过程中建议echo一下SQL语句,这样会方便的找出是否是sql语句错误
c)检查一下你的for循每次是不会在相同的数据中插入,付sql update
UPDATE`desetang`.`tags`SET`describe`='ui' WHERE`tags`.`id`=36;
Ⅸ plsql forupdate怎么手动在尾行加多条数据
1、采用insert into values 语句插入一条,写很多条语句即可多条数据,这种主要针对于离散值以及一些基础信息的录入,如:insert into test(xh,mc) values('123','测试');
如果插入的数据有规律,可利用for、loop循环插入,主要用于批量生成测试数据
begin
for i in 1 .. 100 loop
insert into test(xh,mc) values(i||'','测试');
end loop;
end ;。
2、采用insert into selct from 语句来一次性插入一个集合,这种主要依据于要插入的数据源已经存储于数据库对象中,或者利用al虚表来构造数据,经过加工后写入一个集合。
insert into test (xh,mx) select '123','测试' from al;
3、采用plsql等工具、或者oracle的imp、impdp命令来导入,这种主要用数据库与数据库之间的大批量数据导入,导入的数据格式为plsql的pde、oracle的dmp等。dmp文件可使用
table_exists_action参数控制导入动作:replace替换原表,truncate清除原表数据再导入,append增量导入数据,当然impdp数据泵的导入要依赖于directory路径。
impdp 用户名/密码 mpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append
4、使用excel文件直接拷贝。这种主要用于要写入的数据已是excel文件或者行列分明的其它格式文件,每一列的值和表结构相对应,可直接打开表的行级锁,把数据拷贝进入。
打开行级锁方法:
select t.*,rowid from 表名 t where 1=2;
select * from 表名 where 1=2 for update;
直接把excel数据拷贝到表里
Ⅹ sql update 语句
按你这个脚本直接改:
create
trigger
update_student
on
student
for
update
as
begin
declare
@班级
int
select
@班级=班级
from
inserted
update
class
set
人数
=
人数
+
@@rowcount
where
班级=@班级
select
@班级=班级
from
deleted
update
class
set
人数
=
人数
-
@@rowcount
where
班级=@班级
end
inserted是刚刚增加的整行,deleted是刚刚删除的整行数据
没有updated,update的过程就是先delete,再insert,所以用inserted和deleted能表达update的过程了
另外你这个触发器只能对更新结果是1个班级的有效,如果是多个班级,在select
@班级=班级
from
inserted这句上会报错
最好的办法还是
create
trigger
update_student
on
student
for
update
as
begin
update
class
set
人数
=
人数
+
人数_add
from
(select
班级,count(1)
as
人数_add
from
inserted
group
by
班级)
b
where
class.班级=b.班级
update
class
set
人数
=
人数
-
人数_min
from
(select
班级,count(1)
as
人数_min
from
deleted
group
by
班级)
b
where
class.班级=b.班级
end