【问题标题】:PL/SQL program using CURSOR for frequency distribution in tablePL/SQL 程序使用 CURSOR 在表中进行频率分布
【发布时间】:2021-11-29 08:29:02
【问题描述】:

finaltableA 有两列 WORDS,WCOUNTS。程序应该将 intitaltableA 的每个单词恰好插入 finaltableA 一次。在 WCOUNTS 列中,程序应填写单词出现的频率。

intitaltableA
COVID
is
a
disease
COVID
can
be
treated
with
antibodies
COVID
is
a
serious
disease
there
is
a
vaccination
available
for
COVID

finaltableA 应该是这样的 -

WORDS WCOUNTS
a 3
antibodies 1
available 1
be 1
can 1
COVID 4
disease 2
for 1
is 3
serious 1
there 1
treated 1
vaccination 1
with 1

我应该使用游标来插入和更新表格。我是 PL/SQL 新手。

【问题讨论】:

  • 既然你说你必须使用游标,我认为这是一个家庭作业问题(真正的系统只会做一个简单的插入)。我们很乐意帮助完成家庭作业,但很难提供帮助,除非您包括您尝试过的内容、遇到的错误、无效的内容等。否则,我们必须猜测您遇到了什么问题有。

标签: oracle plsql sql-update sql-insert


【解决方案1】:

很明显,您可以在 PLSQL 中不使用任何光标来执行此操作,所以我猜这意味着您正在尝试解决家庭作业问题或培训问题。无论如何,在这里你可以看到两个简单的选项来获得你想要的结果,有和没有 PLSQL。

选项 1 - 不使用 PLSQL

with x ( words ) 
as 
( 
select 'COVID'        from dual union all
select 'is'           from dual union all
select 'a'            from dual union all
select 'disease'      from dual union all
select 'COVID'        from dual union all
select 'can'          from dual union all
select 'be'           from dual union all
select 'treated'      from dual union all
select 'with'         from dual union all
select 'antibodies'   from dual union all
select 'COVID'        from dual union all
select 'is'           from dual union all
select 'a'            from dual union all
select 'serious'      from dual union all
select 'disease'      from dual union all
select 'there'        from dual union all
select 'is'           from dual union all
select 'a'            from dual union all
select 'vaccination'  from dual union all
select 'available'    from dual union all
select 'for'          from dual union all
select 'COVID'        from dual 
)
select words, count(words) as counter 
from x
group by words
order by 2 desc; 

如果你执行它,它会给你想要的输出

SQL> with x ( words )
  2  as
  3  (
  4  select 'COVID'        from dual union all
  5  select 'is'           from dual union all
  6  select 'a'            from dual union all
  7  select 'disease'      from dual union all
  8  select 'COVID'        from dual union all
  9  select 'can'          from dual union all
 10  select 'be'           from dual union all
 11  select 'treated'      from dual union all
 12  select 'with'         from dual union all
 13  select 'antibodies'   from dual union all
 14  select 'COVID'        from dual union all
 15  select 'is'           from dual union all
 16  select 'a'            from dual union all
 17  select 'serious'      from dual union all
 18  select 'disease'      from dual union all
 19  select 'there'        from dual union all
 20  select 'is'           from dual union all
 21  select 'a'            from dual union all
 22  select 'vaccination'  from dual union all
 23  select 'available'    from dual union all
 24  select 'for'          from dual union all
 25  select 'COVID'        from dual
 26  )
 27  select words, count(words) as counter
 28  from x
 29  group by words
 30* order by 2 desc
SQL> /

WORDS          COUNTER
----------- ----------
COVID                4
is                   3
a                    3
disease              2
there                1
available            1
for                  1
serious              1
antibodies           1
can                  1
vaccination          1

WORDS          COUNTER
----------- ----------
treated              1
be                   1
with                 1

14 rows selected.

选项 2 - 使用 PLSQL 和 CURSOR

在下面的示例中,我将使用dbms_output 来显示结果。请记住,这里有几十种方法可以做到这一点,我只是使用我能想到的最简单的一种。

SQL> create table t ( words varchar2(40) ) ;

Table created.

SQL> insert into t
  2  with x ( words )
  3  as
  4  (
  5  select 'COVID'        from dual union all
  6  select 'is'           from dual union all
  7  select 'a'            from dual union all
  8  select 'disease'      from dual union all
  9  select 'COVID'        from dual union all
 10  select 'can'          from dual union all
 11  select 'be'           from dual union all
 12  select 'treated'      from dual union all
 13  select 'with'         from dual union all
 14  select 'antibodies'   from dual union all
 15  select 'COVID'        from dual union all
 16  select 'is'           from dual union all
 17  select 'a'            from dual union all
 18  select 'serious'      from dual union all
 19  select 'disease'      from dual union all
 20  select 'there'        from dual union all
 21  select 'is'           from dual union all
 22  select 'a'            from dual union all
 23  select 'vaccination'  from dual union all
 24  select 'available'    from dual union all
 25  select 'for'          from dual union all
 26  select 'COVID'        from dual
 27* ) select words from x
SQL> /

22 rows created.

SQL> commit ;

Commit complete.

SQL>  declare
  2  begin
  3  for i in ( select words, count(words) as counter from t group by words order by 2 desc )
  4  loop
  5     dbms_output.put_line( 'Words: '||i.words||' - Wcount is: '||i.counter||' ');
  6  end loop;
  7* end;
SQL> /
Words: COVID - Wcount is: 4
Words: is - Wcount is: 3
Words: a - Wcount is: 3
Words: disease - Wcount is: 2
Words: antibodies - Wcount is: 1
Words: for - Wcount is: 1
Words: be - Wcount is: 1
Words: vaccination - Wcount is: 1
Words: can - Wcount is: 1
Words: available - Wcount is: 1
Words: treated - Wcount is: 1
Words: there - Wcount is: 1
Words: with - Wcount is: 1
Words: serious - Wcount is: 1

PL/SQL procedure successfully completed.

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2017-04-03
    • 2018-04-28
    • 2017-12-23
    • 2016-05-29
    • 2021-07-03
    相关资源
    最近更新 更多