我编写了一个具有以下查询的SQL脚本.查询工作正常.
update partner set is_seller_buyer=1 where id in (select id from partner
where names in
(
'A','B','C','D','E',... // around 100 names.
));
Run Code Online (Sandbox Code Playgroud)
但现在我不想在查询中写入大约100个名称,而是想从CSV文件中获取所有名称.我在互联网上阅读了关于SQL*Loader但我对更新查询没有太多了解.我的csv文件只包含名称.

我试过了
load data
infile 'c:\data\mydata.csv'
into table partner set is_wholesaler_reseller=1
where id in (select id from partner
where names in
(
'A','B','C','D','E',... // around 100 names.
));
fields terminated by "," optionally enclosed by '"'
( names, sal, deptno )
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?提前致谢.
我有一个简单的PL/SQL过程,有一个游标,我迭代它.在每次迭代中,我都会创建一个UPDATE语句(在对数据执行某些业务逻辑之后).
但是,如果有很多迭代(数万个),这可能会变得非常慢,因为在每次迭代中都有单个UPDATE语句.
有没有办法以某种方式"延迟"这些更新,以便它们一次性执行(因此更快).
编辑:Oracle 11
是否可以比较原始数据类型的变量?我正在使用XMLDOM.DomNodes,它是一个具有一个字段的记录:
TYPE DOMNode IS RECORD (id RAW(12));
Run Code Online (Sandbox Code Playgroud)
所以我有两个节点,那么我可以通过它们的id字段来比较它们吗?我尝试了几个样品,乍一看似乎有效:
FUNCTION findParentNode(p_node IN xmldom.domnode) RETURN PLS_INTEGER
AS
nRetVal PLS_INTEGER;
BEGIN
FOR i IN ParentNodes.First .. ParentNodes.Last
LOOP
IF ParentNodes(i).id = p_node.id THEN
nRetVal := i;
EXIT;
END IF;
END LOOP;
RETURN nRetVal;
END;
Run Code Online (Sandbox Code Playgroud)
但Oracle文档中有一两件事让我担心: 原始数据是像VARCHAR2数据,只是PL/SQL不解释原始数据 是什么意思?如果pl/sql不解释raw,那么它可以比较吗?
SELECT empno, deptno
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by empno, deptno --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
此查询不起作用,因为它Sal应该在group by子句中.任何人都可以解释为什么会这样,并且有没有其他选择在不改变group by子句的情况下获得相同选择的排名?你想只根据工资订购排名.
编辑
假设在emp表中有另一个列名commision,我必须通过deptno和commision分组并仅通过deptno进行分区,那么建议的答案是什么:
SELECT empno, deptno,sum(sal)
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by deptno,commision --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
现在我如何通过depno和commision进行分组,并且只能通过deptno进行分区.
如何在不同的列上进行分组并根据不同列的分区查找排名
如何从oracle数据库中的datetime列中删除时间并将其保存回来,默认时间为00:00:00,而不会影响任何日期.
例如:我有一个列数据类型的日期时间,并有数千条记录,包括日期和时间.我希望保留所有日期,并将默认时间设置为00:00:00或从此列中的所有记录中完全删除它.请让我知道任何查询吗?
我正在使用 oracle applicationexpress (11g),我想删除一个工作区和一个用户。可能找不到这方面的任何资源。
谢谢
在执行查询时
select * from employee
where salary <= previous_salary
Run Code Online (Sandbox Code Playgroud)
我得到一个错误的输出如下(它返回整个表).我在Oracle Application Express Edition中这样做
ID NAME SALARY DEPT PREVIOUS_SALARY
1 nadeem 1000 10 1500
2 kutu 1000 10 1500
3 aisha 1500 20 500
4 aisha 1500 20 500
Run Code Online (Sandbox Code Playgroud)
并执行此查询
select * from employee
where salary >= previous_salary
Run Code Online (Sandbox Code Playgroud)
我没有找到数据.
需要SQL帮助 - 我想用不同的随机数生成和更新每一行的列.
数据库#Oracle 10g.
示例 - 当我执行类似这样的操作时,它会更新具有相同编号的所有行
update mytable r
set r.generated_num =
(select floor(dbms_random.value(100,9999999)) from dual).
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我需要在Oracle SQl中使用Quotes Example获取一个值
SQL: SELECT mrpid from demandbasic;
MRPID
------------
DEM#000001
Run Code Online (Sandbox Code Playgroud)
我需要得到结果
MRPID
------------
'DEM#000001'
Run Code Online (Sandbox Code Playgroud)
如何根据需要获得结果
我可以在SQL LOADER中执行类似的操作吗?
LOAD DATA
INFILE 'table_with_one_million_rows.dat'
INTO TABLE TABLE_WITH_ONE_MILLION_ROWS
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
COL1 DECIMAL
, COL2 DECIMAL IF COL1='X' '1' else '0'
, COL3 CHAR
)
Run Code Online (Sandbox Code Playgroud) oracle ×10
sql ×6
oracle11g ×3
plsql ×3
oracle10g ×2
sql-loader ×2
dom-node ×1
oracle-apex ×1
performance ×1
random ×1
xmldom ×1