plsql 不能初始化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了plsql 不能初始化相关的知识,希望对你有一定的参考价值。

Initialization error Could not initialize "D:\OraClient\oci.dll" OCIDLL forced to D:\OraClient\oci.dll LoadLibrary(D:\OraClient\oci.dll) returned 0

你的操作系统是多少位的,如果是64位的,在安装是不能安装到X86的目录.
例如安装到
D:\Program Files (x86)
参考技术A 应该是文件配置路径有问题追问

路径都配置好了  

database不显示

追答

可能是数据库安装不正确,我以前遇到过这样的,重装就好了。

本回答被提问者采纳

不能正确引发异常的 PLSQL 函数

【中文标题】不能正确引发异常的 PLSQL 函数【英文标题】:PLSQL Function that doesn't raise exception properly 【发布时间】:2016-04-21 21:05:45 【问题描述】:

我正在编写一个函数,用于在输入 ID 时返回学生的姓名。如果输入了数据库中不存在的 ID,我希望引发异常。相反,当我输入错误的学生 ID 时,如果我抛出了基本异常,它要么不返回任何内容,要么返回此错误消息并声明异常:

6503. 00000 -  "PL/SQL: Function returned without value"
*Cause:    A call to PL/SQL function completed, but no RETURN statement was
       executed.
*Action:   Rewrite PL/SQL function, making sure that it always returns
       a value of a proper type.

这是我的功能:

CREATE OR REPLACE Function STUDENT( S_NUM IN NUMBER)
RETURN varchar2 IS
STUDENT_NAME varchar2(50);
NOTEXISTS   EXCEPTION;
   cursor S_CUR is
   SELECT S_NAME
      FROM ROSTER
      WHERE S_NUM = S_ID;
BEGIN
   open S_CUR;
   fetch S_CUR into STUDENT_NAME;

   if S_CUR%notfound then
      RAISE NOTEXISTS;
   end if;
   close S_CUR;
RETURN STUDENT_NAME;

EXCEPTION
WHEN NOTEXISTS THEN -- handle the error
      dbms_output.put_line('NO STUDENT FOUND.');
END;

有什么想法吗?

【问题讨论】:

您需要在RAISEwhen 部分出现异常 或者一个RETURN语句,例如,RETURN NULL; 【参考方案1】:

发生异常时,您不会返回实际的错误消息。您的函数应该返回 varchar。但是,您只是打印错误而不返回实际的错误消息。

EXCEPTION
WHEN NOTEXISTS THEN -- handle the error
      dbms_output.put_line('NO STUDENT FOUND.');
      return 'No Student Found'
END;

【讨论】:

是的,这通常用于调试并确保代码到达那里【参考方案2】:

首先,不要定义您自己的仅在您的函数上下文中有效的异常,而是使用为这种情况定义的标准异常 - NO_DATA_FOUND 异常:

CREATE OR REPLACE Function STUDENT(S_NUM IN ROSTER.S_ID%TYPE)
    -- Exceptions: raises NO_DATA_FOUND if the student ID passed in
    --             parameter S_NUM is not found in the STUDENT table.
    RETURN ROSTER.S_NAME%TYPE
IS
  STUDENT_NAME ROSTER.S_NAME%TYPE;
  bData_found  BOOLEAN;

 CURSOR S_CUR IS
   SELECT S_NAME
      FROM ROSTER
      WHERE S_NUM = S_ID;
BEGIN
  OPEN S_CUR;

  FETCH S_CUR INTO STUDENT_NAME;

  bData_found := S_CUR%NOTFOUND;

  CLOSE S_CUR;

  IF bData_found THEN
    RETURN STUDENT_NAME;    
  ELSE
    RAISE NO_DATA_FOUND;
  END IF;
END STUDENT;

其次,不要在函数中处理异常。异常的目的是允许代码将异常情况传达给其他代码。让调用者处理异常,如:

DECLARE
  nStudent_id      ROSTER.S_ID%TYPE := 12345;
  strStudent_name  ROSTER.S_NAME%TYPE;
BEGIN
  strStudent_name := STUDENT(nStudent_id);
  DBMS_OUTPUT.PUT_LINE('S_ID=' || nStudent_id || '  NAME=' || strStudent_name);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('NO STUDENT FOUND.');
END;

祝你好运。

【讨论】:

同意,在一定程度上。一个函数应该处理它自己的、特定于函数或特定于应用程序的错误,即使它只是为了引发错误并将其传递给调用者。例如,如果学生 ID 不应大于 45999,则该函数可以有自己的 EXCEPTION 以在用户输入 60444 时提醒调用者。

以上是关于plsql 不能初始化的主要内容,如果未能解决你的问题,请参考以下文章

PLSQL集合笔记

PLSQLDeveloper 提示不能初始化?

Plsql 未初始化的集合

orcale用PLSQL打开为啥来时报初始化错误

32位的xp系统用plsql连接32位的oracle时初始化失败找不到库oci.dll,求解释

重装XP系统之后 PLSQL不可以使用了,提示初始化失败,除了重装 还有没有别的办法