如果表 A 和表 B 中的滚动匹配,则更新表 B 中学生的姓名。要更新的条件 - 如果第一行匹配,则更新为 "FirstStudent"



我不知道如何在sql中创建数组和使用for循环。

merge 
into student ta
using student2 tb
on (tb.rollno= ta.rollno)
when matched
then update 
set ta.name = 'xyz';

我可以检查相等性并通过默认值'xyz'更新它。我想创建一个数组并从数组中获取值并相应地更新它

这里有一个选择:使用适当格式模型的TO_CHARTO_DATE函数的组合(将ID转换为儒略历日期,然后将SPTH格式模型应用于拼写该数字)。

使用merge代替update,因为它只会影响匹配的行。

样本数据:

SQL> select * from tablea;
ID NAME
---------- -----
1 ram
2 raghu
4 joel
SQL> select * from tableb;
ID NAME
---------- --------------------
1 san
2 liana
3 james

合并:

SQL> merge into tableb b
2    using tablea a
3    on (a.id = b.id)
4    when matched then update set
5      b.name = to_char(to_date(b.id, 'J'), 'jspth') || ' student';
2 rows merged.

结果:

SQL> select * from tableb;
ID NAME
---------- --------------------
1 first student
2 second student
3 james
SQL>

第5行右侧是做什么的:

SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> select to_date(1, 'J') from dual;
TO_DATE(1,
----------
01.01.4712
SQL> select to_char(to_date(1, 'J'), 'jspth') from dual;
TO_CH
-----
first
SQL>

阅读格式模型


如果ID是1008呢?没有:

SQL> select to_char(to_date(1008, 'J'), 'jspth') from dual;
TO_CHAR(TO_DATE(100
-------------------
one thousand eighth
SQL>

最新更新