PL/SQL 中的过程可以有参数的默认值,但调用者可以传递与默认值相同的值。有没有办法从 PL/SQL 内部确定是否传递了参数?正如暗示的那样,这不能通过将值与默认值进行比较来完成。
使用 Oracle 的Advanced Queuing是否可以按 LIFO(后进先出)顺序出列消息?有通过缺乏信息的指示,这是不是一种选择,但也许是有办法做到这一点,如以不同的顺序排队。
例如:
alter session set nls_date_format = 'DD-MON-YYYY hh24:mi:ss';
Run Code Online (Sandbox Code Playgroud)
更改会话的日期格式。
什么是nls在这里吗?
作为一名 DBA 实习生,为了成为数据仓库项目的一部分,需要了解什么?
我的意思是建议使用哪些资源来概括了解 PL/SQL 和其他概念如何用于 Datawarehouse 项目?
使用 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';
用于初始化?
Oracle SQL Developer(我使用的是 v3.2)有一个名为“DB Doc”的特性,它为数据库对象生成文档。我主要想用它来为我的存储过程、函数、包和类型生成文档。但是,我找不到任何文档来描述我应该使用什么语法。
我已经确定我应该/* ... */在我的程序/任何东西上方的行上使用注释,并且(通过从 JavaDoc 借用)我已经成功地使用了@param和@returns语句,但我不确定我还能使用什么。例如,是否有作者、版本、数据修改等字段?
我已经对这个站点、谷歌和 Oracle 的文档进行了多次搜索,但都无济于事!
oracle oracle-11g-r2 documentation plsql oracle-sql-developer
我有一个类似的查询
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) 我正在沿着不利的设计路线进行编程。我对架构没有影响,因为它属于现成的标准软件。
为简单起见,假设该软件存储多个用户的地址簿。每个表都分配有相应用户的名称。
这些表是这样创建的:
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 的建议来做。
我宣布一个类型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 …
这是我创建的表:
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)
但我收到编译错误。错误可能在哪里?