如何循环更新oracle一列的值
发布网友
发布时间:2022-05-26 15:10
我来回答
共5个回答
热心网友
时间:2023-10-23 15:23
哥们,不用循环吧?再说用循环也不能解决吧,循环你的值怎么赋?你怎么知道下个记录该更新成什么?
通过to_char(to_date(logintime,'yy-mm-dd'),'yyyy-mm-dd')试试可不可转换,没环境没法试,不行的话用instr函数,一句update就行了,不过我现在没时间写代码,给你个思路
instr((logintime,'-',1)可以取出第一个-的位置,然后通过substr(logintime,1,instr((logintime,'-',1)-1)取出第一个-前面的部分,就是年,20||就行了,然后再用instr(logintime,'-',2)
--这个是第2个-的位置,知道第1、2个-的位置后还是通过substr取出第1个-和第2个-之间的字符,就是月,case when一下如果是1位就补个0,。。。。依次类推,麻烦是麻烦点,但是比较通用,能适应各种情况,不过日期的话应该有规律,应该能根据规律简化不少,你自己琢磨吧.
如果你非要用循环可通过rowid这个伪列,即定义一个参数做计数用,循环一次加1,直到等于max(rowid)为止,不过我实在想不出用循环怎么弄,期待高手。。。
热心网友
时间:2023-10-23 15:24
如何循环更新oracle一列的值
----运行下面过程的时候最好备份你的数据表,先用备份的数据表来测试转换是否有问题
----使用备份数据表测试只需把下面的表名修改成备份数据表名即可,
declare
cursor c_cur is
select * from uf_staffinformlogin for update of logintime;
v_logintime date;
begin
for i in c_cur loop
v_logintime:=to_date(i.logintime,'yy-mm-dd'); ---- 这里是一个字符串转时间类型的转换,你需要
热心网友
时间:2023-10-23 15:24
----运行下面过程的时候最好备份你的数据表,先用备份的数据表来测试转换是否有问题
----使用备份数据表测试只需把下面的表名修改成备份数据表名即可,
declare
cursor c_cur is
select * from uf_staffinformlogin for update of logintime;
v_logintime date;
begin
for i in c_cur loop
v_logintime:=to_date(i.logintime,'yy-mm-dd'); ---- 这里是一个字符串转时间类型的转换,你需要
----测试转换是否有问题,oracle可能把11转换成1911,我这里没有测试环境不能确定
update uf_staffinformlogin set logintime=to_char(v_logintime,'yyyy-mm-dd')
where current of c_cur; --这是基于游标的更新它会锁住你的logintime列,所以你要确定你的数据
----库在你更新的时候不会修改logintime列
end loop;
end;
2..你可以在执行上面语句之前查询下伪劣
select logintime,to_char(to_date(logintime,'yy-mm-dd'),'yyyy-mm-dd') v_logintime from uf_staffinformlogin
是否有问题追问你好 能不能再说点详细点呢??
追答语句都给你写上面了,非常简单的语法,看不懂的话,我也不知道怎么在跟你说详细了
select logintime,to_char(to_date(logintime,'yy-mm-dd'),'yyyy-mm-dd') v_logintime from uf_staffinformlogin
这条语句能够查询出你logintime 列的值和替换后生成的值,你可以查询下是否是你想要的答案
没错也可以不用,循环只是一个思路。
update uf_staffinformlogin set logintime =to_char(to_date(logintime,'yy-mm-dd'),'yyyy-mm-dd')
直接更新全部表。
不过建议你更改的时候还是先备份下表
备份表uf_staffinformlogin_bak 你可以
create table uf_staffinformlogin_bak as select * from uf_staffinformlogin
热心网友
时间:2023-10-23 15:25
一句SQL语句,就可以全部更新完啦。没必要循环啊
不知道看了下面的SQL,是否能对你有些启发?
SQL> SELECT
2 TO_CHAR( TO_DATE('11-6-1', 'YY-MM-DD'), 'YYYY-MM-DD') A,
3 TO_CHAR( TO_DATE('11-6-21', 'YY-MM-DD'), 'YYYY-MM-DD') B,
4 TO_CHAR( TO_DATE('11-6-27', 'YY-MM-DD'), 'YYYY-MM-DD') C
5 FROM
6 al;
A B C
---------- ---------- ----------
2011-06-01 2011-06-21 2011-06-27
热心网友
时间:2023-10-23 15:26
update 表名 set 列名=更新值
这样就可以更新指定列的所有值了。
如何循环更新oracle一列的值
通过to_char(to_date(logintime,'yy-mm-dd'),'yyyy-mm-dd')试试可不可转换,没环境没法试,不行的话用instr函数,一句update就行了,不过我现在没时间写代码,给你个思路 instr((logintime,'-',1)可以取出第一个-的位置,然后通过substr(logintime,1,instr((logintime,'-',1)-1)取出第...
oracle怎么修改一个字段的数据并递增
update emp set "number"=rownum ;commit;number是oracle关键字,所以加了引号,你要是实际表中不叫这个名字,可以不加引号的
oracle数据循环修改
使用游标取出数据,用一个数字变量进行计数,然后对数字求mod 3,为1的赋值a,2的赋值b,0的赋值c。假设表有主键id,要修改的列为value,部分代码如下:cnt := 0;for aa in (select id from tabxxx order by id) loop cnt:=cnt 1;if mod(cnt,3)=1 then update tabxxx set value='a' ...
oracle循环语句?
FOR循环则在指定范围内迭代。其语法如下:sql FOR 循环变量 IN 范围 LOOP 执行代码块;END LOOP;FOR循环的特性在于它可以自动处理迭代过程,无需手动定义循环次数或条件。使用FOR循环的指南包括明确循环变量的范围和类型,确保循环能够正常执行。代码示例如下:sql FOR i IN 1..10 LOOP dbms_output.put...
在oracle中怎么对一张表中的列进行循环,比如说,我执行第一个字段,再...
要对表中的字段进行遍历吗? 用user_tab_cols begin for i in (select column_name from user_tab_cols where table_name=upper('表名'))loop dbms_output.put_line(i.column_name);end loop;end;
怎么循环oracle的alter脚本
怎么循环oracle的alter脚本 CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1 [START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue [{MAXVALUE n | NOMAXVALUE}] //最大值 [{MINVALUE n | NOMINV...
oracle查询表用for in loop循环出来更新
1、查看当前用户使用的表空间情况,使用命令select * from user_users即可,其中username标识用户名,default_tablespace表示默认的表空间。2、查看oracle下面所有的表空间,使用命令select * from Dba_Tablespaces即可,呈现的信息包括表空间名称以及表空间的大小。3、表空间是非常重要的资源,如果我们想查看表...
怎么取得oracle数据库,下一个自动增长列的值
1、如创建一个序列:CREATE SEQUENCE emp_sequence --序列名INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10;2、然后执行下边语句:select emp_sequence.nextval from dual;3、结果:其中1就是下一个值,如果...
oracle 存储过程循环执行update语句
create or replace procedure P_Update(o_vc_message out varchar2)is type column1 is table of table1.column1%type index by binary_integer;col1s column1;type rid is table of rowid index by binary_integer;rids rid;temp table1.column1%type;begin select column1,rowid bulk collect ...
oracle存储过程怎么写循环
1、第一步,编写存储过程的整体结构,然后定义变量,见下图。2、其次,完成上述步骤后,在定义变量后定义游标,begin,select sysdate into v_date from dual,end test_proc,如下图所示。3、接着,完成上述步骤后,写一个for循环,游标开始for循环,为临时变量名任意起个名,输出一个字段,使用变量...