oracle 自定义函数,调用时报“程序包或函数无效”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 自定义函数,调用时报“程序包或函数无效”相关的知识,希望对你有一定的参考价值。
仿着网上自定义一个实现split功能的函数,大神们帮看一下哪里出错了,谢谢
你的这个函数编译大概不能通过吧: lxi_split函数已经将返回值定义为TA_lxi表对象,TA_lxi表对象中的元素为TY_lxi类型的,但是在做pipe row给返回表增加元素时使用的又是字符串,这明显与定义不符合,编译会有错误的。该函数没有编译通过,当然在调用时会提示“程序包或函数不存在”,因为该函数还没有建立。
应该定义一个TY_lxi变量,例如:
v_data TY_lxi := TY_lxi(''); -- 这里括号里面的值要随TY_lxi类型而定
然后,在循环中将字符串赋给该变量的N2成员: v_data.N2 := v_str
接下来是把该变量加入返回表: pipe row(v_data); 参考技术A 重新编译一下,然后show err 看看 参考技术B 可能是函授编译没有成功吧
关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service
如何在静态方法中调用注入的service
Public class ClassA
public static ClassA classA;
@Resource
private Service service;
//原理时在工程启动时加载,在静态方法前加载,这样就可以在静态方法中调用注入的方法啦 @PostConstruct public void init() classA = this;
classA.service=service;
关于jpa的Specification自定义函数
这个时自定义方法的源码,有注释,不多说啦
1 /** 2 * Create an expression for the execution of a database 3 * function. 4 * @param name function name 5 * @param type expected result type 6 * @param args function arguments 7 * @return expression 8 */ 9 <T> Expression<T> function(String name, Class<T> type, 10 Expression<?>... args);
咱说说这个类,也就是
ParameterizedFunctionExpression,是如何实现动态组合排序条件,实现decode
<T> Expression<T> function(String name, Class<T> type,
Expression<?>... args);
//这是function实现实际调用的方法;他调用的就是这个类ParameterizedFunctionExpression的构造方法
@Override
public <T> Expression<T> function(String name, Class<T> returnType, Expression<?>... arguments)
return new ParameterizedFunctionExpression<T>( this, returnType, name, arguments );
//ParameterizedFunctionExpression的构造方法
public ParameterizedFunctionExpression(
CriteriaBuilderImpl criteriaBuilder,
Class<X> javaType,
String functionName,
Expression<?>... argumentExpressions)
super( criteriaBuilder, javaType, functionName );
this.argumentExpressions = Arrays.asList( argumentExpressions );
this.isStandardJpaFunction = STANDARD_JPA_FUNCTION_NAMES.contains( functionName.toUpperCase(Locale.ROOT) );
//实现
Expression<Integer> expression = null;
//存储排序条件
List<Expression<?>> argumentExpressions = new ArrayList<Expression<?>>();
//排序字段
argumentExpressions.add(cb.literal("grade");
//排序的顺序
argumentExpressions.add(cb.literal(1));
expression = new ParameterizedFunctionExpression<Integer>((CriteriaBuilderImpl) cb, Integer.class, "decode",
argumentExpressions);
以上是关于oracle 自定义函数,调用时报“程序包或函数无效”的主要内容,如果未能解决你的问题,请参考以下文章
Oracle创建一个自定义函数,返回emp表的行数,请问哪位大神知道啊?
关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service