小编Z.S*_*mon的帖子

游标的替代

我有一个函数,每次调用都会更改其值。我想在一个查询中多次使用此值,但是我不想多次执行它,因为我想从第一次调用中获取该值。我试过了:

SELECT RESULT value1,
       RESULT value2,
       RESULT value3
  FROM (SELECT function_invocation() RESULT
          FROM dual);
Run Code Online (Sandbox Code Playgroud)

但是每个VALUE列给我不同的值,这意味着该函数被多次调用。

一种替代方法是编写一个游标,但是我想知道纯SQL是否可行。

sql oracle plsql

5
推荐指数
1
解决办法
102
查看次数

如何强制oracle对每一行执行子查询?

我有两个表,我想从第二个表中为第一个表中的每条记录选择随机值。问题是,似乎每行的这个值总是相同的,这意味着它只对所有行执行一次。我怎样才能做到这一点?

create table first_table(name varchar2(100));
insert into first_tablevalues('John');
insert into first_tablevalues('Jessie');
insert into first_tablevalues('Jack');

select * from second_table;
create table second_table(id number);
insert into second_table(id) values(1);
insert into second_table(id) values(2);
insert into second_table(id) values(3);
insert into second_table(id) values(4);
insert into second_table(id) values(5);
insert into second_table(id) values(6);
Run Code Online (Sandbox Code Playgroud)

然后我执行了这个查询,但是对于第一个表中的每个名称,我得到了相同的数字。

SELECT NAME,
       (SELECT id
          FROM (SELECT id
                  FROM second_table
                 ORDER BY dbms_random.value)
         WHERE rownum = 1)
  FROM first_table;
Run Code Online (Sandbox Code Playgroud)

sql oracle

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

Bash单引号未知行为

我在这里已经阅读了Bash中单引号和双引号之间的区别,即单引号将不允许任何插值。但是我遇到了这样一种情况,单引号实际上是插值变量值的唯一方法。为了示例,我创建了一个名为“ test_file”的文件,其中包含

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

我在同一目录中创建了一个脚本,该脚本的目的是提取该文件的各个部分,我将其称为test.sh,其内容如下:

#!/bin/bash
BEGIN=3
END=9

cat test_file | sed -n ''$BEGIN', '$END'p'
Run Code Online (Sandbox Code Playgroud)

现在,我尝试了最后一行的不同设置,例如:

cat test_file | sed -n '${BEGIN}, ${END}p'
cat test_file | sed -n '"${BEGIN}", "${END}"p'
cat test_file | sed -n '"$BEGIN", "$END"p'
Run Code Online (Sandbox Code Playgroud)

但是他们都不起作用。我的问题是:为什么这样工作?

bash sed

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

标签 统计

oracle ×2

sql ×2

bash ×1

plsql ×1

sed ×1