pl sql developer登陆界面找不到oracle数据库选项 怎么办
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pl sql developer登陆界面找不到oracle数据库选项 怎么办相关的知识,希望对你有一定的参考价值。
参考技术A 我也和你碰到同样的问题。我是这样解决的。点击桌面上的PLSQL不输入任何东西,进入。Tools->Preferences,在OracleHome
OCI
Library两栏中分别填入Oracle客户端的路径和OCI文件的路径(oci.dll文件直接在instantclient_10_2文件夹下),
所以我在这两个选项中填写的内容是“D:\oracle\product\10.2.0\db_1\BIN”和“D:\oracle\product\10.2.0\db_1\BIN\oci.dll
然后重新启动PLSQL就可以了,希望能对你有帮助。
PL/SQL 找不到数据异常处理
【中文标题】PL/SQL 找不到数据异常处理【英文标题】:PL/SQL no data found exception handling 【发布时间】:2017-02-14 11:02:07 【问题描述】:我有一个 EMAILS 表,其中包含以下列:ROUTINE、EMAILS 和 COPIES,它们定义了应该使用 UTL_MAIL 将特定过程的结果发送给谁(至/cc)。
我有以下代码:
PROCEDURE myproc AS
NO_EMAIL_FOUND EXCEPTION;
e EMAILS%ROWTYPE;
x NUMBER;
BEGIN
--fetch data
SELECT x INTO x FROM <...>;
--fetch emails
SELECT * INTO e FROM emails WHERE routine='FRS_WEEKLY';
IF e.emails IS NULL AND e.copies IS NULL THEN
RAISE NO_EMAIL_FOUND;
END IF;
<send mail code using UTL_MAIL>;
EXCEPTION
WHEN NO_EMAIL_FOUND THEN <code1>;
WHEN NO_DATA_FOUND THEN <code2>;
WHEN OTHERS THEN NULL; --RAISE;
END myproc;
我希望 myproc 在 EMAILS 表中没有电子邮件时执行 code1。我的问题是没有引发 NO_EMAIL_FOUND 异常并且 code2 执行,因为在 SELECT 语句中引发了 NO_DATA_FOUND 异常。如何避免这种情况?
【问题讨论】:
【参考方案1】:试试这个:
PROCEDURE myproc AS
NO_EMAIL_FOUND EXCEPTION;
e EMAILS%ROWTYPE;
x NUMBER;
BEGIN
BEGIN
--fetch data
SELECT x INTO x FROM <...>;
--fetch emails
BEGIN
SELECT * INTO e FROM emails WHERE routine='FRS_WEEKLY';
EXCEPTION WHEN NO_DATA_FOUND THEN
RAISE NO_EMAIL_FOUND;
END;
IF e.emails IS NULL AND e.copies IS NULL THEN
RAISE NO_EMAIL_FOUND;
END IF;
<send mail code using UTL_MAIL>;
EXCEPTION
WHEN NO_EMAIL_FOUND THEN <code1>;
WHEN NO_DATA_FOUND THEN <code2>;
WHEN OTHERS THEN NULL; --RAISE;
END;
END myproc;
【讨论】:
是的,解决方案是将我的 SELECT 封装到内部 BEGIN EXCEPTION END 结构中,在内部捕获 NO_DATA_FOUND,并根据需要将其传播到 NO_EMAIL_FOUND,最后捕获它。 IF e.emails IS NULL ... 则不再需要。谢谢。【参考方案2】:使用这个:
PROCEDURE myproc AS
NO_EMAIL_FOUND EXCEPTION;
e EMAILS%ROWTYPE;
x NUMBER;
BEGIN
--fetch data
SELECT x INTO x FROM <...>;
--fetch emails
BEGIN
SELECT * INTO e FROM emails WHERE routine='FRS_WEEKLY';
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE NO_EMAIL_FOUND;
END;
IF e.emails IS NULL AND e.copies IS NULL THEN
RAISE NO_EMAIL_FOUND;
END IF;
<send mail code using UTL_MAIL>;
EXCEPTION
WHEN NO_EMAIL_FOUND THEN <code1>;
WHEN NO_DATA_FOUND THEN <code2>;
WHEN OTHERS THEN NULL; --RAISE;
END myproc;
我希望您知道此例程只能处理一封电子邮件;如果有多个,则会引发 TOO_MANY_ROWS 异常。
【讨论】:
列 'routine' 是我的 EMAILS 表中的 PK,因此不会有 TOO_MANY_ROWS(每个过程执行一条记录和一封邮件)。当然,一封电子邮件,但有更多的电子邮件地址。以上是关于pl sql developer登陆界面找不到oracle数据库选项 怎么办的主要内容,如果未能解决你的问题,请参考以下文章
[Oracle] - 使用32位 PLSQL(PL/SQL Developer)登陆64位Oracle失败之解决
如何在 PL/SQL Developer 中启用 dbms_output
oracle数据库中有数据,通过pl/sql查询不到,用sqlplus能查到,PL/SQL developer会对数据进行本地缓存