标签: oracle11g

内联查询与 with 子句的性能问题

我有一个结构如下的查询:

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)

sql performance oracle11g database-performance

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

什么时候使用 PL/SQL?

我制作的每个应用程序都位于数据库、Web 堆栈之上,并以 Oracle 作为存储库。Oracle PL/SQL 对我来说一直是个谜。你什么时候使用它?是否仅在存储过程中(我也不做很多。)

您什么时候使用 Oracle PL/SQL?

plsql oracle11g

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

使用记录在现有表上的表列上创建唯一约束

是否可以在带有记录的现有表上的表列上创建唯一约束?

ALTER TABLE Persons ADD UNIQUE (P_Id)
Run Code Online (Sandbox Code Playgroud)

如果表中有数据并且其中的某些数据P_Id不是唯一的,会发生什么情况?

sql database oracle ddl oracle11g

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

使用提示优化 Oracle 查询

我有一个复杂的 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)

sql oracle query-hints oracle11g

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

SQL - 如何使用一个SQL语句更新两个行表

我有这个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)

sql oracle oracle10g oracle11g

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

SQL内部联接 - 获取最大值

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 oracle oracle11g

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

在Oracle 11g中,如何在没有"order by"的情况下更改sql结果的顺序?

现在我有一个非常简单的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)

我尝试过:更新,插入,删除一些无效的记录.

sql oracle oracle11g

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

ORACLE 1z0-047摘录

这是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.我有一个疑问如下:外表是什么意思?当我尝试运行查询时,所有四个选项都有效.

:)

sql oracle oracle11g oracle-sqldeveloper

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

HAVING子句在这里实际发生了什么?

这是SQL Fiddle链接.

根据我的理解,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)

sql group-by having oracle11g having-clause

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

如何进行返回'01 -JAN-1900'的查询

我们正在使用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)

sql oracle date oracle11g

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