2015-04-14 30 views
0

只需從編輯器(Toad)直接調用該參數即可。不知道爲什麼重複檢查函數定義和變量類型時出現上述錯誤。所有信息可在網上似乎是爲存儲過程 - 我不相信在這裏PLS-00306:調用'select_s'時參數的數量或類型不正確

DECLARE 
TYPE attrs_type is VARRAY(10) of STRING(10); 
l_ldap_host VARCHAR(255) := 'SERVERNAME'; 
l_ldap_port INT := 389; 
l_ldap_user VARCHAR(255) := 'USERNAME'; 
l_ldap_passwd VARCHAR(255) := 'PASSWORD'; 
l_ldap_base VARCHAR(255) := 'l=something,dc=something'; 
l_session DBMS_LDAP.session; 
l_retval NUMBER; 
l_entry VARCHAR(255); 
l_attrs attrs_type; 
l_message VARCHAR(255) := null; 
l_filter VARCHAR(255) := 'objectclass=*'; 

BEGIN 
l_session := DBMS_LDAP.init(hostname => l_ldap_host, 
          portnum => l_ldap_port); 
l_retval := DBMS_LDAP.simple_bind_s(ld => l_session, 
            dn => l_ldap_user, 
           passwd => l_ldap_passwd); 
l_attrs(1) := '*'; -- retrieve all attributes      
l_retval := DBMS_LDAP.search_s(
          ld => l_session, 
          base => l_ldap_base, 
          scope => DBMS_LDAP.SCOPE_SUBTREE, 
          filter => l_filter, 
          attrs => l_attrs, 
          attronly => 0, 
          res => l_message); 
DBMS_OUTPUT.put_line(l_message); 
-- code to do stuff     
EXCEPTION 
    WHEN OTHERS THEN DBMS_OUTPUT.put_line (SQLERRM); 
END 

回答

1

使用你必須定義l_attrsdbms_ldap.string_collection,而不是你自己的類型。即使您的類型以相同的方式定義,它也不會與另一個明顯相似的類型互換。對於Oracle,您的attrs_type而不是string_collection相同。因此,你得到的錯誤 - 你確實使用了錯誤的類型爲該論點。

From the documentation

在封裝規範中定義的集合類型是不相容具有相同定義的本地或獨立集合類型。

+0

謝謝,修復了它。由於某種原因,暗指存在這種獨特的數據類型的文檔相當稀少,但是現在我能夠追蹤一些信息,知道我在找什麼。 – user1958756

相關問題