ColdFusion - cfproc param:如何使用db定义的变量%TYPE调用存储过程?

时间:2014-08-08 15:15:20

标签: oracle coldfusion coldfusion-9 cfqueryparam cfstoredproc

我在Oracle中有一个存储过程。输入参数之一是定义类型(见下文)。每当我调用cfstoredproc时,我得到的错误是"表达式类型错误ORA-06550"。它是一个格式化的varchar,它是一个表列。没有与之匹配的CFPROCPARAM类型。

类型是包定义的特定格式(表格列):EMAIL_ADDRESSES_TABLE.USER_ID%TYPE。 表列USER_ID是:USER_ID VARCHAR2(8 BYTE)

USER_ID是0填充的数字,例如&00; 00001234'

我的电话:

<cfstoredproc procedure="PK_EMAIL.get_emails" datasource="#MYDSN#">
  <cfprocparam type="in" cfsqltype="CF_SQL_VARCHAR" variable="p_user_id" value="#formattedUserId#">
  <cfprocparam type="in" cfsqltype="CF_SQL_NUMERIC" variable="p_active_only" value="1">
  <cfprocresult name="spResult">
</cfstoredproc>

存储过程功能:

FUNCTION get_emails(
  p_user_id        IN EMAIL_ADDRESSES_TABLE.USER_ID%TYPE,
  p_active_only    IN SIMPLE_INTEGER
) RETURN EMAIL_ADDRESSES_TABLE;

我从系统得到的错误是:

[Macromedia][Oracle JDBC Driver][Oracle]ORA-06550: line 1, column 18: PLS-00382: expression is of wrong type ORA-06550: line 1, column 7: PL/SQL: Statement ignored 

1 个答案:

答案 0 :(得分:1)

@DanBracuk帮我解决了这个问题。

这些函数最初设置为作为Java API调用公开。

简短回答:这是一个“功能”,而不是“程序”。 ColdFusion无法直接调用DB函数。

解决方法(此处提供此信息的人提供的信息):需要创建调用该函数的Oracle PROCEDURE。它只是充当CF和Oracle函数之间的中介。