Oracle的PLS-00231 错误分析
Oracle的PLS-00231 错误分析 ,这个错误一般是函数的访问权限导致的,在包头声明为共有函数则全票通过,在包体声明的话位死于函数
Oracle的PLS-00231 错误分析 ,这个错误一般是函数的访问权限导致的,在包头声明为共有函数则全票通过,在包体声明的话位死于函数会导致错误。
create or replace function Two
return Number
is
begin
return 2;
end Two;
create or replace procedure PrintTwo
is
myNum Number;
begin
select Two()
into myNum
from dual;
dbms_output.put_line(myNum);
end PrintTwo;
以上函数和过程,放在函数和过程中声明,调用正常。注意two函数被printtwo过程以sql语句形式调用。
若将此二程序段放入一个package中,函数私有方式,则包体编译时出错,报pls-00231错误,函数不能在sql语句中使用之类。
原因为何?
pl sql和sql对于oracel而言,是两个不同的引擎,因而对于sql引擎而言,plsql包中私有的two函数,是无法发现的。
所以包中使用two函数,方法有两种:
1 在包头声明中声明two函数,即将two函数作公有声明,此时可以select two into mynum from dual;形式调用,当然这样将无法隐藏two函数。
2 以mynum:=two;方式调用,由于此种方式以pl sql引擎解析,所以可以正常使用以私有方式声明的two函数。
可见需以合适的方式将two函数暴露给sql或plsql引擎方可使用。那么若不将two作公有声明,而用包名.two方式调用,不一样可定位到two函数?哦当然不行,你忘了two未作公有声明,在包外无论如何都是不可见的哈哈。
那么对于包内一个返回集合类型的函数,,如:FUNCTION strsplit(p_list IN VARCHAR2, p_sep IN VARCHAR2 DEFAULT '|')
RETURN str_split
PIPELINED;
str_split为一个自定义集合类型:
TYPE "STR_SPLIT" IS TABLE OF VARCHAR2 (4000);
此时,无论将type str_split以公有,或私有方式 在包中声明,均无法正常使用sql方式调用,由于返回为集合,也不能用plsql的kkk:=str_split方式调用。此时,只能将str_split定义为oracle的自定义数据类型:
create or replace TYPE "STR_SPLIT" IS TABLE OF VARCHAR2 (4000)
然后去除包内公有或私有的type str_split定义,即可使用sql方式调用函数。
本文永久更新链接地址:

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



The article discusses using MySQL's ALTER TABLE statement to modify tables, including adding/dropping columns, renaming tables/columns, and changing column data types.

InnoDB's full-text search capabilities are very powerful, which can significantly improve database query efficiency and ability to process large amounts of text data. 1) InnoDB implements full-text search through inverted indexing, supporting basic and advanced search queries. 2) Use MATCH and AGAINST keywords to search, support Boolean mode and phrase search. 3) Optimization methods include using word segmentation technology, periodic rebuilding of indexes and adjusting cache size to improve performance and accuracy.

Article discusses configuring SSL/TLS encryption for MySQL, including certificate generation and verification. Main issue is using self-signed certificates' security implications.[Character count: 159]

Article discusses popular MySQL GUI tools like MySQL Workbench and phpMyAdmin, comparing their features and suitability for beginners and advanced users.[159 characters]

Article discusses strategies for handling large datasets in MySQL, including partitioning, sharding, indexing, and query optimization.

The difference between clustered index and non-clustered index is: 1. Clustered index stores data rows in the index structure, which is suitable for querying by primary key and range. 2. The non-clustered index stores index key values and pointers to data rows, and is suitable for non-primary key column queries.

The article discusses dropping tables in MySQL using the DROP TABLE statement, emphasizing precautions and risks. It highlights that the action is irreversible without backups, detailing recovery methods and potential production environment hazards.

The article discusses creating indexes on JSON columns in various databases like PostgreSQL, MySQL, and MongoDB to enhance query performance. It explains the syntax and benefits of indexing specific JSON paths, and lists supported database systems.
