小编Wol*_*ang的帖子

什么是在SQL开发人员(v4.1)中关闭脚本输出窗口的快捷键

我们可以使用ALT + Page up/Down在工作表和脚本输出窗口之间导航,但我找不到任何快捷键来关闭它.

oracle oracle-sqldeveloper

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

何时提及 authID 作为 current_user

我主要是一个 Oracle 新手,所以请原谅我,如果这是一个愚蠢的问题......

我已经阅读了很多关于 authID 的文章,我的理解是 AUTHID 子句指示 Oracle 例程是使用调用者权限 (CURRENT_USER) 还是使用所有者权限 (DEFINER) 运行。如果未指定该子句,Oracle 将默认使用 AUTHID DEFINER。

您能给我一个简单的例子来更好地理解 authID 吗?

oracle

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

何时在 Oracle 中重新引发相同的异常

我正在阅读 Steven Feuerstein 的 PL/SQL 书。根据它:

当您想从异常处理程序中重新引发(或传播出去)相同的异常时,请使用此表单,如下所示:

EXCEPTION 
 WHEN NO_DATA_FOUND 
 THEN 
 -- Use common package to record all the "context" information,
 -- such as error code, program name, etc. 
 errlog.putline (company_id_in); 
 -- And now propagate NO_DATA_FOUND unhandled to the enclosing block.
 RAISE; 
Run Code Online (Sandbox Code Playgroud)

当您想要记录发生错误的事实,然后将相同的错误传递给封闭块时,此功能很有用。这样,您可以记录应用程序中发生错误的位置,但仍会停止封闭块,而不会丢失错误信息。

我试一试:

create table log_error
    ( 
      error_code number,
      error_name varchar2(400)
    );


 declare
    l_q number := 400;
    l_r number := 0;
    l_result number;
    err_num NUMBER;
    err_msg VARCHAR2(100);
begin
    l_result := l_q/l_r; 
 EXCEPTION
   WHEN OTHERS THEN
  err_num := SQLCODE;
  err_msg …
Run Code Online (Sandbox Code Playgroud)

oracle plsql exception

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

包的初始化部分

这是包规范:

CREATE OR REPLACE PACKAGE employee_info
IS
  PROCEDURE p;

  FUNCTION f RETURN BOOLEAN;

END employee_info;
Run Code Online (Sandbox Code Playgroud)

这是包体:

CREATE OR REPLACE PACKAGE body employee_info
IS
  PROCEDURE p IS
  BEGIN
    dbms_output.put_line('This is procedure');
    dbms_output.put_line(chr(10));
  END;

  FUNCTION f RETURN BOOLEAN IS
  BEGIN
    dbms_output.put_line('This is function ');
    dbms_output.put_line(chr(10));
    RETURN true;
  END;

BEGIN
  dbms_output.put_line('This is the initialization section of package body');
END employee_info;
Run Code Online (Sandbox Code Playgroud)

我什么时候应该使用包的初始化部分?

如上例所示,当我第一次执行代码时,我只能看到package body的begin..end被执行,而其余的调用则不会执行.

我正在使用以下语句执行过程和函数:

 execute employee_info.p;

    declare
      p1 boolean;
    begin
      p1 := employee_info.f;
    end;
Run Code Online (Sandbox Code Playgroud)

oracle plsql initialization package

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

为什么在这里使用立即执行?

我正在阅读专家 - oracle-database-architecture书.汤姆正在解释关于绑定变量的内容.

你能告诉我第一个程序和第二个程序有什么不同吗?根据我的理解,我们execute immediate用来执行动态SQL语句或匿名PL/SQL块.

这是目标表:

create table t ( x int ); 
Run Code Online (Sandbox Code Playgroud)

以下是过程#1的示例:

ops$tkyte%ORA11GR2> create or replace procedure proc_name1
2 as
3 begin
4   for i in 1 .. 10
5     loop
6       execute immediate
7         'insert into t values ( '||i||')';
8   end loop;
9 end;
10 /
Run Code Online (Sandbox Code Playgroud)

以下是过程#2的示例:

create or replace procedure proc_name2
 as
 begin
   for i in 1 .. 10
   loop
     insert into t values ( i);
   end loop;
 end;
Run Code Online (Sandbox Code Playgroud)

oracle performance plsql dynamic-sql

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

在程序中将DML置于提交后会产生什么影响?

我在一个包中创建了一个过程,该过程在表中进行插入/删除,并且在成功完成事务之后,提交完成.

像这样:

create or replace package pac is    
procedure pr_test(emp_id number)
is
begin
-- some code
if something then
  insert
else
  delete

commit;
end pr_test;
end pac ;
Run Code Online (Sandbox Code Playgroud)

我应该将此交易作为AUTONOMOUS_TRANSACTION吗?在程序中放置这样的提交有什么影响?

oracle oracle11g

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