oracle 给变量赋值方法总结

CREATE OR REPLACE Procedure grantValue Is
   v_tabName     Varchar2(50);
   v_recordNum   Number;
   v_var         Varchar2(50) := '直接赋值法'; -- 方法1 直接赋值
   v_minvar      Varchar2(50);
   v_sql         Varchar2(200);
   v_tab         Varchar2(50);
 Begin
   
    -- 方法二, select into 方法
    Select Min(t.sal) Into v_minvar From emp t;
    dbms_output.put_line('最少工资为'||v_minvar);

    -- 方法三, 动态sql 发
    v_tab := 'emp';
    v_sql := 'select count(*) from '|| v_tab;
    Execute Immediate v_sql Into v_minvar;
    dbms_output.put_line('公司总人数为'||v_minvar);
    
 End grantValue;
/

-- 静态sql 与 动态 sql:oracle 编译pl/sql 程序块分为两种
-- 其一为前期编译,sql语句在程序编译期间就已经确定,大多数的编译情况属于这种类型
-- 其一为后期编译, sql语句只有在运行阶段才建立,例如当查询条件为用户输入时

-- 动态SQL 程序语法讲解
-- execute immediate dynamic_sql_string using in_params_list return into out_params_list
-- 1) 动态sql用在ddl和带参数的dml
-- 2) 绑定参数列表为输入参数列表.在运行时刻与动态sql语句中的参数进行绑定
-- 3) 输出参数列表为动态sql语句执行后返回的参数列表
-- Select * From emp; select JOB,SAL from emp
Create Or Replace Procedure getSalary(p_empno In Varchar2, p_ename In Varchar2) As
    v_job      Varchar2(50);
    v_salary   Number;
    v_sql      Varchar2(500);
 Begin 
 
   v_sql := 'select job from emp where empno ='||p_empno;
   
   execute Immediate v_sql into v_job; 
   
   dbms_output.put_line('工作职位是'||v_job||'工资情况为'||v_salary);
   
 End getSalary;     
/    
    
-- 固定数组
CREATE OR REPLACE Procedure usingArray As
   type type_array is varray(5) of varchar2(20);
   pid   type_array := type_array('1','2','3','4','5');
   pname type_array := type_array('chris','cathy','jimmy','rufus','rose');
   v_counter Number;

   Begin
     for i in 1..pid.count loop  
       
       If (pid(i) = '3')  Then
          v_counter := i;
          Exit;
         End If;
     End Loop;
 
     dbms_output.put_line(pname(v_counter));        

End usingArray;
/

   
-- oralce 数组 和各种类型的定义
-- oracle using  returning into 用法
-- oracle merge into 用法   
    
    
   

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭