标签: plsql

将YYYY-MM-DDTHH24:MI:SEC.milliseconds时间戳插入Oracle

我需要将以下日期/时间格式插入Oracle:

INSERT INTO mytable (ID, DATETIMEREAD) VALUES (1, TO_TIMESTAMP('2016-06-03T11:28:07.571', 'YYYY-MM-DDTHH24:MM:SS')
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ORA-01821: date format not recognized
Run Code Online (Sandbox Code Playgroud)

如何正确地将该ISO格式(没有时区)插入Oracle.该DATETIMEREAD列类型是TIMESTAMP(6)

oracle plsql sqlplus

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

使用与带有提示的SQL完全相同的命令将查询结果作为CSV在PL/SQL中获取

通过使用带有提示的简单查询,我可以在Oracle中将结果作为CSV获取.

SELECT /*csv*/ * FROM dual;
Run Code Online (Sandbox Code Playgroud)

这回来了

"DUMMY"
"X"
Run Code Online (Sandbox Code Playgroud)

现在我想在PL/SQL中使用完全相同的提示,以便不重新发明轮子.

SET SERVEROUTPUT ON;
declare
  cur sys_refcursor;
  csv_line varchar2(4000);
begin
  open cur for select /*csv*/ * from dual;
  loop
    fetch cur into csv_line;
    exit when cur%NOTFOUND;
    dbms_output.put_line(csv_line);
  end loop;
  close cur;
end;
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只打印

X
Run Code Online (Sandbox Code Playgroud)

这似乎忽略了暗示.

有什么方法可以做到这么简单,还是我必须编写一段特殊的代码来将数据导出为CSV?

sql csv oracle plsql oracle11g

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

PL/SQL - ORACLE:ORA-01843:不是有效月份

我想在oracle数据库版本11.2.0.4上的PL/SQL ETL进程内的时间戳列表中插入数据

如果我在Toad中运行"从seletcted行创建INSERT",我将获得以下SQL命令:

 Insert into xxxx$1
   (ID, ITEM, ITEMSIZE, QUALITY, MATERIAL, 
    COLOUR, IMAGEURL, CREATIONDATE, SAMPLEITEMNUMBER, ITEMNUMBER)
 Values
   (111, 339079775, '1', 'Microfaser PRIMABELLE®', 'TEXTILE', 
    '1 (=creme)', 'url', TO_TIMESTAMP('27.06.2016 15:49:35.000000','DD.MM.YYYY HH24:MI:SS.FF'), 'xxx', 'xxxx');
COMMIT;
Run Code Online (Sandbox Code Playgroud)

在PL/SQL中,我生成一个VARCHAR2/String,它看起来像是一样的:

v_sql :=
                                'INSERT INTO xxxx'
                             || p_importpostfix
                             || '  VALUES ('
                             || seq_xxxx.NEXTVAL
                             || ','
                             || v_rec.item_id
                             || ', '''
                             || v_size
                             || ''','''
                             || v_quality
                             || ''','''
                             || v_material
                             || ''','''
                             || v_colour
                             || ''','''
                             || NULL
                             || ''',to_timestamp('''|| to_char( sysdate, 'DD.MM.YYYY HH24:MI:SS')||''',''DD.MM.YYYY HH24:MI:SS.FF''),'''
                             || v_rec.vid …
Run Code Online (Sandbox Code Playgroud)

database oracle toad plsql oracle11g

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

REGEXP_SUBSTR圆括号

我想用分号分隔的字符串分成PL/SQL的部分.只要字符串中没有圆括号,它就可以正常使用REGEXP_SUBSTR.

例:

select REGEXP_SUBSTR('A;B;C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)

预期的结果是:ABC

A; B(1); C的结果应该是AB(1)C,但我得到的是:AB 1

select REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)

这意味着'('被检测为分隔符,但我不明白这种行为.有人可以开导我吗?

regex oracle plsql regexp-substr

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

在Oracle PL / SQL中将UTC转换为本地时区

如何使用Oracle PL / SQL将UTC转换为本地时间?我的数据提供商向我发送了以下内容:

    <EndDateTime>"2016-09-26T08:00:00Z"</EndDateTime>
Run Code Online (Sandbox Code Playgroud)

我想将其转换为“柏林”时间。我在这里搜索了答案,但是很难找到正确的答案。

oracle timezone plsql utc converter

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

按照设置而不是迭代方法重写表更新

我在测试的Oracle数据库中有一个用户电子邮件地址列表,这些电子邮件地址当前都设置为相同的值。我想用唯一的条目替换这些条目,其中混入了许多无效地址和空值。我的表当前看起来像这样,总共约有25万行。(为节省空间,我排除了空条目和无效条目)

+-------------+--------------------+
| employee_id |       email        |
+-------------+--------------------+
|           1 | test@testemail.com |
|           2 | test@testemail.com |
|           3 | test@testemail.com |
|...          |...                 |
+-------------+--------------------+
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样

+-------------+---------------------+
| employee_id |        email        |
+-------------+---------------------+
|           1 | test1@testemail.com |
|           2 | test2@testemail.com |
|           3 | test3@testemail.com |
|...          |...                  |
+-------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

我编写了以下PL / SQL来进行更改,它可以工作,但是效率很低。我可以使用另一种方法来利用集合处理吗?

感谢您对此的任何帮助。

DECLARE
    i number(20);
    l_employee_id hr.employees.employee_id%TYPE;
    output_query varchar2(1000);
    CURSOR c_cursor IS
        SELECT employee_id
        FROM hr.employees;
PROCEDURE update_sql(id_num IN hr.employees.employee_id%TYPE, 
                     email IN VARCHAR2) IS …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

有没有办法在Oracle中引用包含撇号的SQL字符串以避免需要转义撇号?

我在PL/SQL中编写了很多动态SQL:

-- Let's assume the query is much more complex and bind variables are not a solution here
EXECUTE IMMEDIATE 'INSERT INTO foo (col) VALUES (''somevalue'')';
Run Code Online (Sandbox Code Playgroud)

观察令人讨厌的转义撇号重复以形成有效的SQL/PL/SQL语法.有什么方法可以引用SQL字符串文字,这样我就不用再逃避了吗?将SQL字符串从实际执行复制粘贴到PL/SQL程序中会很好,而不需要对撇号进行繁琐的修补.

(我故意在这里问这个问题,用我自己的答案记录引用功能)

sql oracle plsql escaping

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

PLSQL动态SQL按名称绑定变量

我想在我的程序中动态执行一个sql语句.据我所知,绑定是根据使用顺序完成的.

有没有办法可以说出类似的话

:a --> par_a_
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

内部变量立即执行

我在pl sql中使用以下过程

CREATE OR REPLACE "MY_PROCEDURE" (v_id number, v_name varchar2) AS
     BEGIN
        EXECUTE IMMEDIATE ' CREATE TABLE T_TEMPO ( t_id number , t_name varchar2(250) , t_value number )';
        EXECUTE IMMEDIATE 'INSERT INTO T_TEMPO (t_id , t_name, t_value)
                           SELECT id , name , value
                           from TABLE_2
                           where TABLE_2.id = || v_id ||
                           AND TABLE_2.name = || v_name || ';
Run Code Online (Sandbox Code Playgroud)

但这是行不通的,因为我有一个丢失的表达式错误,我想知道它无法评估立即执行中变量v_id和v_name的值。有人可以帮忙吗?

sql oracle plsql

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

Oracle PL/SQL - 如何创建程序包本地别名而不创建公共同义词?

我多次在另一个包中引用相同的单个存储过程.我想知道你是否可以为其他程序创建一个Package Level同义词,
而不是pkg_name.每一个都使用它?
这也会给它一些继承.

基本上,我正在尝试模仿static import或extends使用Java.

代替:

CREATE OR REPLACE PACKAGE BODY pkg
IS
   PROCEDURE test
   IS
   BEGIN
      some_name_utils.do_lots_of_stuff()
   END;
BEGIN
END;
/
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

CREATE OR REPLACE PACKAGE pkg
IS
   SYNONYM do_lots_of_stuff FOR some_name_utils.do_lots_of_stuff;

   PROCEDURE test;
END;
/
CREATE OR REPLACE PACKAGE BODY pkg
IS
   PROCEDURE test
   IS
   BEGIN
      do_lots_of_stuff()
   END;
BEGIN
END;
/
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

标签 统计

oracle ×10

plsql ×10

sql ×3

oracle11g ×2

converter ×1

csv ×1

database ×1

escaping ×1

regex ×1

regexp-substr ×1

sqlplus ×1

timezone ×1

toad ×1

utc ×1