我制作的每个应用程序都位于数据库、Web 堆栈之上,并以 Oracle 作为存储库。Oracle PL/SQL 对我来说一直是个谜。你什么时候使用它?是否仅在存储过程中(我也不做很多。)
您什么时候使用 Oracle PL/SQL?
我有下面的脚本,我希望脚本只显示两天之间的天数,基本上删除了数字前面的负号。这可能吗?
select (TO_DATE(START_DATE, 'DD-MM-YYYY') - TO_DATE(END_DATE, 'DD-MM-YYYY')) AS days
From testtable1
Run Code Online (Sandbox Code Playgroud)
输出是:
Days
-5
-6
etc.
Run Code Online (Sandbox Code Playgroud) 我得到了一个带有包含下一个字符串的 clob 字段的表:
"hello world Chr(13)
hello world 2 chr(13)
hello world 3"
Run Code Online (Sandbox Code Playgroud)
我试图hello world 2在第一个和最后一个断行之间获取文本“ ”,但我仍然不能。
我尝试成功DBMS_LOB.INSTR和regexp_substr失败......有人可以在这里帮助我吗?
非常感谢。
在匿名块中,我有一个空/空的输入字符串,并且想要针对非空字符串进行检查。例子:
DECLARE
v_notnull varchar2(50):='this string is never null';
v_input varchar2(50):='';
BEGIN
IF trim(v_input) != trim(v_notnull) THEN
dbms_output.put_line('the strings do NOT match');
ELSE
dbms_output.put_line('the strings DO match');
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我运行这个块时,'the strings DO match'即使我输入''与 string 不同的空字符串(又名 null),输出也始终v_input是这样'this string is never null'。如何确保 oracle 覆盖空字符串大小写?当v_input为空时我希望输出为'the strings do NOT match'.
就像这里的一些问题一样,(a == 1 && a == 2 && a == 3)已经证明它可以在javascript中被评估为true而我只是想知道PL/SQL中是否还有一种方法评估它也是真的.
我DBMS_LOCK.sleep(50);在代码中间使用过.
但是,当我运行PL/SQL代码时.看起来它在开始时运行'DBMS_LOCK.sleep`而不是在睡眠代码之前执行代码.
请建议一些解决方案,在PL/SQL代码中添加大约50秒的延迟.
我是PL / SQL的新手,并且遇到以下情况。
在下面的脚本中,如果他们发现任何异常,我希望脚本继续进行迭代。处理了异常,但是我无法在循环外执行continue语句。
declare
l_max_ID number;
l_Temp_val number;
type array_t is varray(135) of varchar2(30);
arrayTable array_t := array_t('YSXQTAAA', 'YSXQTAFA', ... );
array array_t := array_t('YSXQNAAA', 'YSXQNAFA', ...);
begin
dbms_output.put_line(arrayTable.count);
for i in 1..arrayTable.count loop
dbms_output.put_line('Tabla impactada ' || arrayTable(i));
execute immediate 'select max(id)+1 from ' || arrayTable(i) into l_max_ID;
execute immediate 'alter sequence ' || array(i) || ' restart start with ' || TO_CHAR(l_Max_ID);
dbms_output.put_line('alter sequence RS1.' || array(i) || ' restart start with ' || TO_CHAR(l_Max_ID));
end loop; …Run Code Online (Sandbox Code Playgroud) 我正在尝试分块获取数据并插入表中以满足业务需求。
declare
i_start_date date := date '2019-01-01'; --start date set
i_end_date date := date '2019-12-31'; --end date set
begin
for i_start_date<=i_end_date --condition to fetch data & insert
(for cur_r in (select a.id, b.status
from table1 a join table2 b on a.msg_id = b.msg_id
where b.t_date = i_start_date
)
loop
insert into test_table (id, status)
values (cur_r.id, cur_r.status);
end loop;)
i_start_date+1 -- increment start date
end;
/
Run Code Online (Sandbox Code Playgroud)
你能帮我修复上面的块吗?
谢谢,
我如何在数字列 (Oracle) 中找到 Sequence 中有 3 位数字的所有记录。我是否必须使用 substr 将数字分解为单个数字,然后减去第一个和第二个数字以查看它们是 1 还是 -1?有没有更好的方法来做到这一点?我可以将数字分解为数字并将它们传递给 pl/sql 块中的 varray 吗?请帮忙。