我需要将以下日期/时间格式插入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中将结果作为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?
我想在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) 我想用分号分隔的字符串分成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)
这意味着'('被检测为分隔符,但我不明白这种行为.有人可以开导我吗?
如何使用Oracle PL / SQL将UTC转换为本地时间?我的数据提供商向我发送了以下内容:
<EndDateTime>"2016-09-26T08:00:00Z"</EndDateTime>
Run Code Online (Sandbox Code Playgroud)
我想将其转换为“柏林”时间。我在这里搜索了答案,但是很难找到正确的答案。
我在测试的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) 我在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语句.据我所知,绑定是根据使用顺序完成的.
有没有办法可以说出类似的话
:a --> par_a_
Run Code Online (Sandbox Code Playgroud) 我在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的值。有人可以帮忙吗?
我多次在另一个包中引用相同的单个存储过程.我想知道你是否可以为其他程序创建一个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)