在某些PL / SQL示例代码中,我每次都使用type和subtype关键字来声明自定义类型(typedef例如,类似于C中的关键字)。
在我看来,它们的用法是可以互换的:它们有什么区别?
嗨,我对Oracle很陌生,需要了解如何做到这一点.
我认为我有一个文本文件,文件中的值是
'20180924''20180923'
我从Pro*c读取这些值,然后我添加29天,所以现在值从20180924变为20180953.我不希望发生这种情况我希望将值添加为
TO_DATE('20180924','yyyymmdd')+29 which returns the value as "23-OCT-18"
Run Code Online (Sandbox Code Playgroud)
答案是正确的,但我希望结果也像20181023一样采用相同的YYYYMMDD格式.
我如何实现这一目标?
我是pl/sql的新手,我无法弄清楚以下脚本中的问题是什么.首先我执行了这个脚本:
CREATE TABLE Cladiri (
id_cladire varchar2(5) constraint pk_cladire primary key,
denumire_cladire varchar2(50),
numar_cladire number(2),
adresa varchar2(50),
cod_postal varchar2(15)
);
Run Code Online (Sandbox Code Playgroud)
哪个成功创建了一个表.接下来,我想创建一个带有外键引用的新表id_cladire:
CREATE TABLE Companii (
id_companie varchar2(5) constraint pk_companie primary key,
denumire_companie varchar2(50),
numar_cladire number(4),
numarul_de_telefon varchar2(20),
numarul_de_oficii number(4),
constraint fk_companie_cladire foreign key (id_cladire) references
Cladiri(id_cladire)
);
Run Code Online (Sandbox Code Playgroud)
执行最后一个脚本时出现以下错误:
ORA-00904:"ID_CLADIRE":标识符无效
问题是什么?
我需要测试表是否存在.如果它存在,我需要获取该表的rowcount,否则我需要将rowcount值设置为NULL.
这是我使用的查询的片段:
SELECT
CASE
-- TABLE A does not exists
WHEN EXISTS (Select TABLE_NAME from ALL_TABLES where TABLE_NAME ='A')
THEN (SELECT COUNT(*) FROM SYS."A")
ELSE NULL
END AS TABLE_count
FROM dual;
Run Code Online (Sandbox Code Playgroud)
执行此查询时,我收到以下错误消息:
SQL Error [942] [42000]: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)
似乎即使EXISTS返回0行,也总是执行THEN子句而不是进入ELSE子句.
我不明白这里的行为.任何的想法 ?
谢谢
我有这个程序,我需要生日字段格式为16-JUL-2018,但是当我运行程序时它以16-JUL-18格式更新.如何以想要的格式更新它?
PROCEDURE update_affiliate (pid NUMBER,
i_username VARCHAR2,
i_first_name VARCHAR2,
i_birthday DATE)
IS
BEGIN
UPDATE affiliate_v
SET username = UPPER (i_username),
first_name = i_first_name,
birthday = TO_DATE(i_birthday,'DD-MON-YYYY'),
WHERE party_id = pid;
END update_affiliate;
Run Code Online (Sandbox Code Playgroud) 我需要在触发器中基于以下条件在BEGIN语句之后创建一个CURSOR:
IF :OLD.DWF_STATUS = 'P' AND :NEW.DWF_STATUS = 'C' THEN
DECLARE CURSOR cur_list IS
SELECT DISTINCT DR_PRJ_ID, STR_EMAIL, DWFU_US_ID
FROM DOC_WORKFLOW JOIN DOC_WF_USERS ON DWFU_DWF_ID = DWF_ID
JOIN DOCUMENT_REF ON DWF_DR_ID = DR_ID AND DR_TYPE = 'P'
LEFT OUTER JOIN ST_REGISTER ON STR_ID = DWFU_STR_ID
WHERE DWF_ID = :NEW.DWF_ID;
END IF;
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到此错误:
错误(99,5):PLS-00103:遇到以下其中一项时遇到符号"END":
begin function pragma procedure子类型
当前游标删除存在之前
如何在Oracle中触发BEGIN语句后声明游标?
我有这个过程,它只是根据一个被调用的列字段删除一行AppID.此过程从另一个AppNbr基于该行列调用的列获取值AppID.TOO_MANY_ROWS尝试SELECT连续时,该过程失败并出现异常.这是PL/SQL:
DECLARE
lvnApplNbr NUMBER;
PROCEDURE deleteAppl(applId IN VARCHAR2) IS
BEGIN
BEGIN
SELECT ApplNbr -- Exception thrown here
INTO lvnApplNbr
FROM Appl
WHERE ApplID = applId;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
-- ... Delete it after some logic
END; -- End Procedure
BEGIN
...
deleteAppl('571E00BA-70E6-4523-BEAC-4568C3DD1A7D');
...
END;
Run Code Online (Sandbox Code Playgroud)
在TOO_MANY_ROWS当异常被抛出SELECT INTO秒.我不知道为什么它会抛出那个错误,因为如果我只是查询这个:
SELECT ApplNbr FROM Appl WHERE ApplId = '571E00BA-70E6-4523-BEAC-4568C3DD1A7D';
Run Code Online (Sandbox Code Playgroud)
只有一行会回来正确ApplId.
到底是怎么回事?
以下代码块有时会出现"ORA-01403:NO DATA FOUND"错误.在第一个查询中,我检索存储在另一个数据库的表中的数据,并将该数据存储到临时表中.在第二个查询中,我从临时表中选择数据INTO局部变量.我必须这样做,因为其中一个字段是CLOB,并且无法跨数据库链接选择CLOB到本地变量.
-- insert clob from remote database into temp table across database link
-- it will be deleted upon implicit commit when the report ends;
INSERT INTO tmp_xml_result
SELECT add_id, site_cd, result_txt
FROM vw_add_result@ADifferentServer
WHERE add_id = p_add_id
AND site = p_site;
-- now that clob is local, we can select it into a variable
SELECT xml
INTO v_xml
FROM tmp_xml_result
WHERE id = p_add_id
AND site = p_site;
Run Code Online (Sandbox Code Playgroud)
该块并不总是错误.当它发生错误时,第二个查询将抛出NO DATA FOUND.
如何调整此代码块以使其永远不会导致"ORA-01403:NO DATA …
我正在尝试这样做:
with
function add_fnc(p_id number) return number
is
begin
return p_id + 1;
end;
insert into temp_table
(
select add_fnc(1) from dual
);
Run Code Online (Sandbox Code Playgroud)
但它显示编译错误:
ORA-00928:缺少SELECT关键字
有没有办法使用带有insert语句的CTE函数?
我必须完成由离开公司的人完成的开发,我试图理解在另一个游标内部构建的游标..这样的事情:
CURSOR c_fund as select col_1,
col_2,
CURSOR(select col_10 * {some formula} clo_n,
col_m
from table2
where col_8 is not null)
(...)
Run Code Online (Sandbox Code Playgroud)
我怎么才能阅读内部光标?当我执行主游标的查询时,我有这个结果:
COL_1 COL_2 CURSOR
------- ------ -------
11619187 604441 (CURSOR)
11619187 604434 (CURSOR)
11619187 604439 (CURSOR)
Run Code Online (Sandbox Code Playgroud)
当我在CURSOR数据上双击(在TOAD上)时,会弹出一个显示数据的新窗口:
CLO_N COL_M
----- ---------------
009511 1g0-M-TPT_BNM
009511 1g0-Q--213_BNM
009511 C--F_R*P_C:R:CT
009511 1g0-M--16_BNM
009511 P*RF_DI-TR
009511 *CR
009511 BOWLING
009511 C--F_BNM
009511 C:PIT:L
009511 N:V
009511 INF--IGN
Run Code Online (Sandbox Code Playgroud)