熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

PL/SQL命名作用域的竅門

2013-11-15 14:39:08  來源: SQL Server 

  很多PL/SQL程序員采用一個命名約定區分不同作用域內的變量從而確定一個值來自哪個作用域一個常用的方法是給參數加前綴p_給局部變量加前綴l_給全局變量或者包變量加前綴g_例如
  
  create or replace function myfunc(p_empno integer) return varchar
  is
    l_ename empename%type;
  begin
    select ename into l_ename
     from emp
     where empno = p_empno;
    return l_ename;
  end myfunc;
  /
  show errors;
  
  PL/SQL有一個有趣的命名作用域系統在這個系統中你可以在一個函數域內通過指定函數或者過程的名字來來訪問在函數或者過程中出現的變量這樣上面的代碼就可以改寫為
  
  create or replace function myfunc(empno integer) return varchar
  is
    ename empename%type;
  begin
    select ename into myfuncename
     from emp
     where empno = myfuncempno;
    return myfuncename;
  end myfunc;
  /
  show errors;
  
  
  
  我知道最少有一個專業組織已經在第二個方法中為其命名約定制定了標准
  
  這個作用域系統實際上帶來了一個奇怪的問題它意味著如果包名和過程或者函數名一樣的話那麼就不可能在這個包內調用與其同名的過程或者函數
  
  create or replace package p
  as
    function test return varchar;
  end p;
  /
  show errors;
  
  create or replace package body p
  as
    function test return varchar
    as
    begin
      return hello world;
    end test;
  end p;
  /
  show errors;
  
    
  create or replace package p
  as
    function p return varchar;
  end p;
  /
  show errors;
  
  create or replace package body p
  as
    function p return varchar
    as
      return ptest;
    end p;
  end p;
  /
  show errors;
  
  Warning: Package Body created with compilation errors
  
  Errors for PACKAGE BODY P:
  
  LINE/COL  ERROR
  
       
  /        PL/SQL: Statement ignored
  /       PLS: component TEST must be declared
  
  自己測試一下這些PL/SQL命名作用域系統的竅門看看你有什麼想法
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22122.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.