标签: plsql

确定传递给过程的参数 (Oracle)

PL/SQL 中的过程可以有参数的默认值,但调用者可以传递与默认值相同的值。有没有办法从 PL/SQL 内部确定是否传递了参数?正如暗示的那样,这不能通过将值与默认值进行比较来完成。

oracle oracle-11g-r2 plsql

6
推荐指数
2
解决办法
2828
查看次数

Oracle 高级排队 LIFO

使用 Oracle 的Advanced Queuing是否可以按 LIFO(后进先出)顺序出列消息?有通过缺乏信息的指示,这是不是一种选择,但也许是有办法做到这一点,如以不同的顺序排队。

oracle oracle-11g-r2 plsql

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

nls_date_format 中的“nls”代表什么?

例如:

alter session set nls_date_format = 'DD-MON-YYYY hh24:mi:ss';
Run Code Online (Sandbox Code Playgroud)

更改会话的日期格式。

什么是nls在这里吗?

oracle oracle-11g-r2 plsql

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

DBA 在数据仓库项目中的范围

作为一名 DBA 实习生,为了成为数据仓库项目的一部分,需要了解什么?

我的意思是建议使用哪些资源来概括了解 PL/SQL 和其他概念如何用于 Datawarehouse 项目?

oracle data-warehouse plsql

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

在 PL/SQL 中初始化关联数组

使用 PL/SQL,假设我们已经声明了一个嵌套表类型及其实例,如下所示:

type nested_tab is table of pls_integer;
tab nested_tab;.

然后我们可以按如下方式初始化我们的嵌套表:

tab := nested_tab(1, 2, 3);.

我们可以做类似的事情来初始化关联数组吗?

换句话说,对于以下关联数组:

type associative_tab is table of varchar2(100) index by pls_integer;
a_tab associative_tab;

有没有比这更短的方法:

a_tab(1) := 'hello';
a_tab(2) := 'world';
...
a_tab(100) := '100th string';

用于初始化?

plsql

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

在哪里可以找到 Oracle SQL Developer 的“生成数据库文档”功能的语法参考?

Oracle SQL Developer(我使用的是 v3.2)有一个名为“DB Doc”的特性,它为数据库对象生成文档。我主要想用它来为我的存储过程、函数、包和类型生成文档。但是,我找不到任何文档来描述我应该使用什么语法。

我已经确定我应该/* ... */在我的程序/任何东西上方的行上使用注释,并且(通过从 JavaDoc 借用)我已经成功地使用了@param@returns语句,但我不确定我还能使用什么。例如,是否有作者、版本、数据修改等字段?

我已经对这个站点、谷歌和 Oracle 的文档进行了多次搜索,但都无济于事!

oracle oracle-11g-r2 documentation plsql oracle-sql-developer

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

如何将单个结果存储在变量中并在查询(Oracle)中重用?

我有一个类似的查询

SELECT id FROM xyz WHERE ...;
Run Code Online (Sandbox Code Playgroud)

它有一个或多或少复杂的 WHERE 子句,并正好返回一列(ID)的一行。我需要此 ID 用于脚本中的多个后续查询。所以我的目标是在一个变量中重用这个结果,但我没有找到一个有效的解决方案。

在这种情况下,加入此查询不是一个好的选择。那么是否有可能告诉 Oracle 将这个单个结果存储在一个变量中并使用这个变量来构建新的查询——明确地在其他查询的条件子句中使用?

如果是这样,也许有人可以发布一个简单的示例-最简单的可能是……。喜欢

SELECT :VARIABLE FROM DUAL
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 plsql scripting

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

从随机数量的结构相同的表中选择

我正在沿着不利的设计路线进行编程。我对架构没有影响,因为它属于现成的标准软件。

为简单起见,假设该软件存储多个用户的地址簿。每个表都分配有相应用户的名称。

这些表是这样创建的:

CREATE TABLE
    NAME_OF_USER
    (
        SURNAME VARCHAR(100),
        TOWN VARCHAR(100)
    )
Run Code Online (Sandbox Code Playgroud)

所以所有表都有这些列:

存在相当于两个地址簿的两个表:

  • 唐老鸭
  • 雏菊鸭

通讯录已经填写如下:

INSERT
INTO
    DONALDDUCK
    (
        SURNAME,
        TOWN
    )
    VALUES
    (
        'Dagobert Duck',
        'Entenhausen'
    )
Run Code Online (Sandbox Code Playgroud)

为了检索我可以运行的完整地址列表

Select * from donaldduck
Select * from daisyduck
Run Code Online (Sandbox Code Playgroud)

但是如果有人为 GOOFY 添加地址簿怎么办?我将不得不更改每个新创建的地址簿的查询,在本例中添加 aSELECT * FROM GOOFY作为第三行。

为了使这更加复杂,还有其他具有不同设置的表(它们正在存储其他信息,这些信息与我列出给定地址簿中的所有条目的任务完全无关)。所以我不能简单地遍历所有现有的表,因为这会导致处理我在查询中不需要的表。

有没有办法说“从包含名为城镇的列的所有表中选择 *”?这应该通过使用普通 SQL 或 PL/SQL 来解决,因为我想避免使用高级语言编写代码,就像我认为我需要遵循 jsapkota 的建议来做。

oracle oracle-11g-r2 plsql

6
推荐指数
2
解决办法
158
查看次数

如何在 Oracle SQL 的 IN 运算符中使用数组变量?

我宣布一个类型TYPE arr_type is TABLE of VARCHAR2(11 BYTE);,然后我初始化:MY_array arr_type := arr_type();

我在其中插入了一些 varchars,然后尝试将它与 IN 运算符一起使用。

set serveroutput on;
DECLARE
  TYPE arr_type is TABLE of VARCHAR2(11 BYTE);
  my_array arr_type := arr_type();
  my_array_two arr_type := arr_type();
BEGIN 

  SELECT MY_ID BULK COLLECT INTO my_array FROM XYZ_REQUEST;
  SELECT ANOTHER_ID BULK COLLECT INTO my_array_TWO FROM ABC_REQUEST WHERE PARENT_ID IN my_array;

   FOR i IN 1..cm_array.COUNT LOOP
     DBMS_OUTPUT.PUT_LINE(my_array(i));
   END LOOP; 
END; 
/
Run Code Online (Sandbox Code Playgroud)

我收到错误:local collection types not allowed in SQL statements在包含:的行上SELECT ANOTHER_ID …

oracle plsql

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

如何在 Oracle PL/SQL 中使用输出参数执行存储过程?

这是我创建的表:

CREATE TABLE Toy
(Toy_No NUMBER PRIMARY KEY,
 Toy_Name VARCHAR(30) NOT NULL
 );
Run Code Online (Sandbox Code Playgroud)

这是我创建的序列:

CREATE SEQUENCE toy_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用输出参数创建一个简单的存储过程:

CREATE OR REPLACE PROCEDURE insert_toys(toy_id OUT NUMBER,toy_name VARCHAR(30))
AS
BEGIN 
toy_id := seq_toy.NEXTVAL;
INSERT INTO Toy (Toy_No,Toy_Name)
VALUES (toy_id,toy_name);
END;
Run Code Online (Sandbox Code Playgroud)

但我收到编译错误。错误可能在哪里?

oracle stored-procedures plsql

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