zoukankan      html  css  js  c++  java
  • ORA-06575:程序包或函数处于无效状态

    今天一个朋友问我下面这段sql语句的问题,我发现了他竟然把程序员的编程思想带入了oracle,虽然是错误的,但也是很经典的错误啊。

    create or replace package p_view_param  is 
       function set_param(num VARCHAR2) return VARCHAR2; 
       function get_param  return VARCHAR2;  
    end p_view_param; 
    
    CREATE  or replace package body p_view_param is 
           paramValue VARCHAR2; 
           -- Param
           function set_param(num VARCHAR2) return VARCHAR2 is 
           begin 
             paramValue:=num; 
             --dbms_output.put_line('num'||num);
             return num; 
            end;  
           
           function get_param return VARCHAR2 is 
           begin 
            dbms_output.put_line('paramValue'||paramValue);
             return paramValue; 
           end; 
    END  p_view_param; 
     
     BEGIN
         SELECT p_view_param.set_param('sss')AS temp  FROM dual;
     END;
    View Code

    执行时发现错误:

    这段sql主要两个问题:

    1.参数变量名尽量不要num这些特殊意义的单词;

    2.包里面的方法是独立的个体,包只是根据相关功能把函数和存储过程封装在一起罢了,而函数之间是独立的,不存在共享变量之类的。如果确实需要就设计为参数传递即可。

    3.创建包和创建包体之间分开,不要一起创建。否则创建包的时候会把包体带进去。

    修正后的sql如下:

    create or replace package p_view_param  is
       function set_param(paramVal VARCHAR2) return VARCHAR2;
       function get_param(paramVal VARCHAR2)  return VARCHAR2;
    
    end p_view_param;
    
    create or replace package body p_view_param is
          
           -- Param
           function set_param(paramVal VARCHAR2) return VARCHAR2 is
            paramValue VARCHAR2(200);
           begin
             paramValue:=paramVal;
             return paramValue;
            end;
            
           function get_param(paramVal VARCHAR2)  return VARCHAR2 is        
           begin
                  --dbms_output.put_line('paramValue'||paramValue);
             return paramVal;
           end;
    
    END  p_view_param;
     SELECT p_view_param.set_param('sss') as temp FROM dual;
     SELECT p_view_param.get_param(p_view_param.set_param('sss')) as temp FROM dual;
    View Code
  • 相关阅读:
    解题:POI 2008 Plot purchase
    1807. 斐波纳契数列简单
    1745. 单调数列
    1700. 增减字符串匹配
    1665. 计算数字
    1523. 分区数组
    1517. 最大子数组
    1598. 两句话中的不常见单词
    1594. 公平的糖果交换
    1510. 亲密字符串(回顾)
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3476557.html
Copyright © 2011-2022 走看看