我需要将包含日期的字符串转换为日期数据类型字段。有时,字符串的格式为yyyy-mm-dd hh24:mi:ss (FA),有时的格式为dd/mm/yyyy hh24:mi:ss (FB)。我正在使用一小段代码来测试、拦截和管理 ORA-01861,但我遇到了一个意想不到的问题。我试着解释一下。
declare
s varchar2(100) := '2023-02-24 14:22:49';
f varchar2(100) := null;
f1 varchar2(100) := 'yyyy-mm-dd hh24:mi:ss';
f2 varchar2(100) := 'dd/mm/yyyy hh24:mi:ss';
d date := null;
begin
f := f1;
d := to_date(s,f);
dbms_output.put_line(f||' --> '||d);
f := f2;
d := to_date(s,f);
dbms_output.put_line(f||' --> '||d);
exception
when others then
dbms_output.put_line(s||' --> '||f||' >>>> '||sqlerrm);
end;
Run Code Online (Sandbox Code Playgroud)
我期望的是,更改S的格式会由于格式不匹配而引发异常,在第一个示例中,这就是发生的情况。输出是:
yyyy-mm-dd hh24:mi:ss --> 24-FEB-23
2023-02-24 14:22:49 --> dd/mm/yyyy hh24:mi:ss >>>> ORA-01861: literal does not match format …Run Code Online (Sandbox Code Playgroud) 这个问题源于此,但我遇到了另一个不同的问题。
我正在使用 PL/SQL 生成大文本输出
set serveroutput on size 1000000; -- maximum limit
declare my_text clob;
begin
for c in ( select letter from dummy_table )
loop
my_text := my_text || c.letter || chr(10);
end loop;
dbms_output.put_line(my_text);
end;
Run Code Online (Sandbox Code Playgroud)
在真实的代码中,我当然不只是连接单个字母,字符串更长,并且连接有更多元素,整体也更长。我已经将输出缓冲区大小增加到 1000000(这是最大值),这有所帮助,但是当我进一步扩展串联时,又开始失败 - 但现在出现了与输出大小无关的不同错误消息,但我通过实验知道它确实有效,因为如果我减少行数它就会起作用。
是否可以将 clob 保存到临时表中?clob 是这里使用的正确数据类型吗?
当我运行此查询时,Oracle给了我一个错误(ORA-00907:缺少右括号):
select *
from reason_for_appointment
where reason_for_appointment_id in
(
select reason_for_appointment_id
from appointment_reason
where appointment_id = 11
order by appointment_reason_id
)
Run Code Online (Sandbox Code Playgroud)
但是,当我只运行子查询时,没有错误.
任何人都可以解释问题是什么?
我在我的一个Oracle数据库中有一个视图,执行时间太长.当语句运行时,它似乎没有停止.
无论如何,我们可以验证此视图的性能或我们如何检查语句会话是否"挂起"?
谢谢,N2EE
我意识到问题在于视图中的底层查询.感谢Edwin的autotrace修复程序.
很难用文字表达,所以假设这个例子表:
| id | col1 | col2 | -------------------- | 1 | aa | 12 | | 2 | aa | 12 | | 3 | bb | 13 | | 4 | cc | 13 |
我想要一个选择行3和4甚至只是值13的查询
所以像检查这个假设:"col2的所有值都相同,应该映射col1的一个值"
我一直在检查,通过在单独的查询和比较中对每列进行"分组依据"和行计数,但是能够挑出有问题的行会很好
查询或pl/sql过程没问题
我知道数据库视图是只读的,或者至少是默认的只读.
是否可以启用oracle视图带来的数据更改?
重新说明:如果我只查看一个表,只是为了隐藏一些列,那么这些数据的更改是否会在表上更新?
我对下面的SELECT有一个有趣的问题.
它关于ORDER BY子句; 我正在尝试使用名为"p_sortby"的变量进行排序.
Order by可以由列名或列位置使用,(1,2,...等).
不知何故,如果我在PL/SQL中使用位置,它就不起作用.所以我必须使用列名,我们不能简单地在那里传递varchar2字符串,我们需要使用真正的列名.我注意到它只适用于varchar2类型的列.它不适用于例如数字列.
你能告诉我关于如何解决的这类问题.
/*I am sorry as I cannot paste the format correct here*/.
Run Code Online (Sandbox Code Playgroud)
你们都可以编辑SELECT并输入所需的格式.
select distinct gl.group_id, gl.group_name
from test_group gl
where gl.group_org_id = p_orgid
and ( gl.group_name_key like '%' || p_name || '%'
or p_name is null
or p_name = ''
)
and ( gl.group_description_key like '%' || p_description || '%'
or p_description is null
or p_description = ''
)
and ( gl.status_code = p_statuscode
or p_statuscode is null
or …Run Code Online (Sandbox Code Playgroud) 我正在编写一个过程来创建一个包含Oracle表中数据的CSV文件.我用过,"spool filename;"但错误即将来临.我可以spool在PL/SQL中使用吗?
我有一个相当简单的PL/SQL查询
(...)
DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
(...)
Run Code Online (Sandbox Code Playgroud)
如何使用上面的语句应用WHERE子句,因为当我使用类似的东西时:
WHERE upper(VALUE) like 'SOMETHING'
Run Code Online (Sandbox Code Playgroud)
它给了我一个空记录集(我绝对肯定有记录符合这些要求).
我不知道这是否重要,但我在Excel工作簿中调用此查询,使用VBA和CreateObject("OracleInProcServer.XOraSession").