【问题标题】:Issue in running a Proc - Oracle PL/SQL运行 Proc 的问题 - Oracle PL/SQL
【发布时间】:2020-06-06 08:37:29
【问题描述】:

我从以下 sql 查询在 Oracle db 中创建了一个 proc:-

CREATE OR REPLACE PROCEDURE getTableDetails(
       p_tablename IN table_info.table_name%TYPE,
       o_owner OUT table_info.owner%TYPE,
       o_table_name OUT  table_info.table_name%TYPE,
       o_num_rows OUT table_info.num_rows%TYPE,
       o_num_cols OUT table_info.num_cols%TYPE,
       o_columnlist OUT table_info.columnlist%TYPE,
       o_keycolumns OUT table_info.keycolumns%TYPE,
       )
IS
BEGIN

with tableinfo as
(select 
    t.owner, 
    t.table_name, 
    t.num_rows,
    count(*) as num_cols,
    listagg(c.column_name, ',') within group (order by c.column_name) as columnlist
  from all_tables t
  join all_tab_columns c on c.owner = t.owner and c.table_name = t.table_name
  group by t.owner, t.table_name, t.num_rows
)
, pkinfo as
(
  select
    c.owner,
    c.table_name,
    listagg(cc.column_name, ',') within group (order by cc.position) as keycolumns
  from all_constraints c
  join all_cons_columns cc on cc.owner = c.owner and cc.constraint_name = c.constraint_name   
  where c.constraint_type = 'P'
  group by c.owner, c.table_name
)
select owner,table_name,num_rows,num_cols,columnlist,keycolumns
into o_owner,o_table_name,o_num_rows,o_num_cols,o_columnlist,o_keycolumns
from tableinfo t
left join pkinfo pk using (owner, table_name)
where table_name = p_tablename
order by t.num_rows desc;

END;
/

当我尝试执行此操作时:-

EXECUTE getTableDetails('ABC_TABLE');

我收到一个无效的 SQL 错误:-

 [Error Code: 900, SQL State: 42000]  ORA-00900: invalid SQL statement

您能帮我解决这个问题吗?对此的查询正在给我结果。

谢谢,

【问题讨论】:

  • 对不起,我从来没有听说过这个。他们在dba-oracle.com/sf_ora_00900_invalid_sql_statement.htm 中解释说,CREATE OR REPLACE PROCEDURE 可能会因此错误而失败,但您说您创建了该过程,而错误是您尝试执行它时。你用什么工具来运行EXECUTE getTableDetails('ABC_TABLE');
  • 你在 Stackoverflow 上查看过错误吗?我刚刚发现了这个:stackoverflow.com/questions/13722307/…
  • 我使用了 DBVisualizer Pro。即使下面给出了一个错误:- begin getTableDetails('ABC_TABLE');结尾; [错误代码:6550,SQL 状态:65000] ORA-06550:第 2 行,第 2 列:PLS-00103:在预期以下情况之一时遇到符号“文件结尾”::=。 (%;
  • @RLearner - 不熟悉该工具(但正如您所收集的,它似乎无法识别来自 SQL*Plus、SQL Developer 和 SQLcl 的 execute 简写);在匿名开始/结束块之后可能期待/ 吗?

标签: oracle plsql oracle11g


【解决方案1】:

我在 Oracle 11g XE 中尝试这样做,但它无法编译,因为:
1-最后一个参数后有一个“逗号”。
2-参数不能引用过程中的类型。

注意:某些 IDE 不接受空行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2011-07-29
    • 2018-01-29
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多