标签: plsql

Oracle to_date 引发 ORA-01861: 文字与格式字符串不匹配

我需要将包含日期的字符串转换为日期数据类型字段。有时,字符串的格式为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)

oracle plsql

1
推荐指数
1
解决办法
206
查看次数

Oracle PL/SQL:解决 DBMS 输出大小限制的方法

这个问题源于此,但我遇到了另一个不同的问题。

我正在使用 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 是这里使用的正确数据类型吗?

sql oracle plsql oracle19c

1
推荐指数
1
解决办法
71
查看次数

Oracle是否允许IN子句中的ORDER BY?

当我运行此查询时,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 plsql ora-00907

0
推荐指数
1
解决办法
3605
查看次数

Oracle数据库10g VIEW性能

我在我的一个Oracle数据库中有一个视图,执行时间太长.当语句运行时,它似乎没有停止.

无论如何,我们可以验证此视图的性能或我们如何检查语句会话是否"挂起"?

谢谢,N2EE

UPDATE

我意识到问题在于视图中的底层查询.感谢Edwin的autotrace修复程序.

sql oracle plsql views oracle10g

0
推荐指数
1
解决办法
6534
查看次数

sql查询以查找非映射列值

很难用文字表达,所以假设这个例子表:

| id | col1 | col2 | 
--------------------
| 1  |  aa  |  12  |
| 2  |  aa  |  12  |
| 3  |  bb  |  13  |
| 4  |  cc  |  13  |

我想要一个选择行3和4甚至只是值13的查询

所以像检查这个假设:"col2的所有值都相同,应该映射col1的一个值"

我一直在检查,通过在单独的查询和比较中对每列进行"分组依据"和行计数,但是能够挑出有问题的行会很好

查询或pl/sql过程没问题

sql plsql

0
推荐指数
1
解决办法
379
查看次数

如何在Oracle中允许更新视图的结果?

我知道数据库视图是只读的,或者至少是默认的只读.

是否可以启用oracle视图带来的数据更改?

重新说明:如果我只查看一个表,只是为了隐藏一些列,那么这些数据的更改是否会在表上更新?

sql oracle plsql

0
推荐指数
1
解决办法
9628
查看次数

PLSQL按问题排序

回到第一版,然后进行一些编辑.见修订问题.

我对下面的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)

sql plsql

0
推荐指数
1
解决办法
2054
查看次数

你能帮我在Oracle编写一个程序来将数据从表中假脱机到CSV文件吗?

我正在编写一个过程来创建一个包含Oracle表中数据的CSV文件.我用过,"spool filename;"但错误即将来临.我可以spool在PL/SQL中使用吗?

oracle plsql oracle10g

0
推荐指数
1
解决办法
2万
查看次数

Pl/SQL中的IndexOf功能

我想在varchar变量中查找特定字符的位置.

oracle plsql indexof

0
推荐指数
1
解决办法
9682
查看次数

WHERE子句中的问题(不知道如何在WHERE子句中解决来自DECODE()函数的结果)

我有一个相当简单的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").

database oracle excel vba plsql

0
推荐指数
1
解决办法
583
查看次数

标签 统计

plsql ×10

oracle ×8

sql ×5

oracle10g ×2

database ×1

excel ×1

indexof ×1

ora-00907 ×1

oracle19c ×1

vba ×1

views ×1