我有一个结构如下的查询:
select (select first_name
from sub_table_1,
sub_table_2,
sub_table_3
where <where clause for sub_table 1,2,4>
and sub_table_1.col_1=table_1.col_1) first_name ,
(select last_name
from sub_table_1,
sub_table_2,
sub_table_3
where <where clause for sub_table 1,2,4>
and sub_table_1.col_1=table_1.col_1) last_name ,
<other select clause for table 1,2,3>
from table_1,
table_2,
table_3
where <Where clauses>
union
select (select first_name
from sub_table_1,
sub_table_2,
sub_table_3
where <where clause for sub_table 1,2,3>
and sub_table_1.col_1=table_4.col_1) first_name ,
(select last_name
from sub_table_1,
sub_table_2,
sub_table_3
where <where clause for sub_table 1,2,3>
and sub_table_1.col_1=table_4.col_1) last_name …Run Code Online (Sandbox Code Playgroud) 我制作的每个应用程序都位于数据库、Web 堆栈之上,并以 Oracle 作为存储库。Oracle PL/SQL 对我来说一直是个谜。你什么时候使用它?是否仅在存储过程中(我也不做很多。)
您什么时候使用 Oracle PL/SQL?
是否可以在带有记录的现有表上的表列上创建唯一约束?
ALTER TABLE Persons ADD UNIQUE (P_Id)
Run Code Online (Sandbox Code Playgroud)
如果表中有数据并且其中的某些数据P_Id不是唯一的,会发生什么情况?
我有一个复杂的 Oracle 查询。
SELECT
r3.object_id
FROM
nc_references r
INNER JOIN nc_objects o ON r.object_id = o.object_id
AND o.object_class_id = 90000330 /* Work Item */
INNER JOIN nc_params p ON p.object_id = o.object_id
AND p.attr_id = 90100070 /* State */ AND p.list_value_id IN ( 90100071 /* Ready */, 90100072 /* Active */ )
INNER JOIN nc_po_actions poa ON poa.manual_task_id = o.object_id
INNER JOIN nc_po_tasks pot ON pot.task_id = poa.task_id
INNER JOIN nc_references r1 ON r1.object_id = pot.container_id
AND r1.attr_id = 9145923960313063683 …Run Code Online (Sandbox Code Playgroud) 我有这个Oracle表,用于存储应用程序设置.

这是用于创建表的SQL脚本:
CREATE TABLE "GLOBALSETTINGS"(
"SettingName" Varchar2(40 ) NOT NULL,
"SettingValue" Varchar2(40 )
)
/
-- Add keys for table GLOBALSETTINGS
ALTER TABLE "GLOBALSETTINGS" ADD CONSTRAINT "Key14" PRIMARY KEY ("SettingName")
/
ALTER TABLE "GLOBALSETTINGS" ADD CONSTRAINT "SettingName" UNIQUE ("SettingName")
/
Run Code Online (Sandbox Code Playgroud)
这是我想要使用的SQL语句:
UPDATE GLOBALSETTINGS
SET settingValue =
CASE
WHEN settingName = 'SessionTTL'
THEN '30'
WHEN settingName = 'MaxUsersActive'
THEN '40'
ELSE settingValue
END
WHERE settingName IN ('SessionTTL', 'MaxUsersActive');
Run Code Online (Sandbox Code Playgroud)
但是当我在SQL开发人员中运行它时,我收到以下错误消息:
Error starting at line 1 in command:
UPDATE GLOBALSETTINGS
SET settingValue = …Run Code Online (Sandbox Code Playgroud) 2个与recordKey相关的表:
TransId recordKey
44 111
56 234
Run Code Online (Sandbox Code Playgroud)
HistoryId recordKey ProcessTime
1 111 0
2 111 200
3 111 4000
4 234 10
Run Code Online (Sandbox Code Playgroud)
如何加入此表,以便在分组时,只获得最大处理时间(4000)?
更新:结果将如下所示:
TransId ProcessTime
44 4000
55 10
现在我有一个非常简单的SQL:select*from table A.
我知道结果将按"rowid"排序(我不太确定,我是新生).如果没有"order by",Oracle将无法保证SQL结果的顺序.
这是我的问题:
一旦我得到了这样的结果:...... A ...... B ....
现在我想按照这个顺序得到结果:...... B ...... A ....
在A没问题之前做B.这该怎么做?
注意1:这是一个实验.请耐心思考我的问题.
注意2:不要更改任何记录的主键,也不要使用任何DDL,并使用相同的SQL"select*from table A".
通知3:
create table A(id NUMBER(20) primary key, name VARCHAR2(30));
insert into A values(1,'one');
insert into A values(2,'two');
select * from A;
Run Code Online (Sandbox Code Playgroud)
我尝试过:更新,插入,删除一些无效的记录.
这是oracle 1z0-047测试中的问题.
EMPDET是一个包含列EMPNO和的外部表ENAME.哪个命令与EMPDET表有关?
A. UPDATE empdet
SET ename = 'Amit'
WHERE empno = 1234;
B. DELETE FROM empdet
WHERE ename LIKE 'J%';
C. CREATE VIEW empvu
AS
SELECT* FROM empdept;
D. CREATE INDEX empdet_dx
ON empdet(empno);
Run Code Online (Sandbox Code Playgroud)
答案是C.我有一个疑问如下:外表是什么意思?当我尝试运行查询时,所有四个选项都有效.
:)
根据我的理解,GROUP BY将返回2个元组.
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
626-21-1500 BACKPACK 1485.86
Run Code Online (Sandbox Code Playgroud)
平均价格的价值是,
AVG(PRICE)
----------
4858.014444
Run Code Online (Sandbox Code Playgroud)
因此,以下查询应筛选出较小的价格值.
SELECT item_type, MODEL, items.price
FROM ITEMS
WHERE MANUFACTURER_NAME = 'UWZ'
AND ITEM_TYPE = 'BACKPACK'
GROUP BY item_type, items.price, MODEL
HAVING ITEMS.PRICE > AVG(ITEMS.PRICE);
Run Code Online (Sandbox Code Playgroud)
所以,输出应该是:
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
Run Code Online (Sandbox Code Playgroud)
但是,实际上,以下是输出:
产量
no rows selected
Run Code Online (Sandbox Code Playgroud) 我们正在使用Oracle 11.以下两个查询都返回01-JAN-00
SELECT to_date('01-JAN-1900','dd-MM-yyyy') FROM DUAL
SELECT to_date('01-JAN-1900','dd-MM-RRRR') FROM DUAL
Run Code Online (Sandbox Code Playgroud)
如何进行返回'01 -JAN-1900'的查询?
我需要做下面的查询(myDtColumn是一个Date列),如果我只使用不带to_date的'01 -JAN-1900',我会得到错误'不一致的数据类型:期望%s得到%s'
case when myDtColumn is null then to_date('01-JAN-1900','dd-MM-yyyy') else
myDtColumn end as myDt
Run Code Online (Sandbox Code Playgroud)
当我尝试以下时,我仍然得到'01 -JAN-00'而不是'01 -JAN-1900'
case when myDtColumn is null then DATE '1900-01-01' else
myDtColumn end as myDt
Run Code Online (Sandbox Code Playgroud)