用Java(JDBC)编写存储函数

用Java(JDBC)编写存储函数,java,sql,hive,callable-statement,Java,Sql,Hive,Callable Statement,在尝试用java测试可调用过程时,我在尝试调用报告给定输入参数(int)符号的存储过程时遇到了一个错误 堆栈跟踪显示: java.sql.SQLException: [Cloudera][JDBC](11420) Error, parameter metadata not populated. at com.cloudera.hiveserver2.exceptions.ExceptionConverter.toSQLException(Unknown Source) at com.cl

在尝试用java测试可调用过程时,我在尝试调用报告给定输入参数(int)符号的存储过程时遇到了一个错误

堆栈跟踪显示:

    java.sql.SQLException: [Cloudera][JDBC](11420) Error, parameter metadata not populated.
at com.cloudera.hiveserver2.exceptions.ExceptionConverter.toSQLException(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common.SPreparedStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common.SCallableStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common4.C4SCallableStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.jdbc41.S41CallableStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.jdbc41.JDBC41ObjectFactory.createCallableStatement(Unknown Source)
at com.cloudera.hiveserver2.hive.jdbc41.HiveJDBC41ObjectFactory.createCallableStatement(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common.SConnection.prepareCall(Unknown Source)
at TestMethods.callableStatement(TestMethods.java:263)
at HiveJdbcGeneralTest.testTableCreation(HiveJdbcGeneralTest.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at 
java.sql.SQLException:[Cloudera][JDBC](11420)错误,未填充参数元数据。
位于com.cloudera.hiveserver2.exceptions.ExceptionConverter.toSQLException(未知源)
位于com.cloudera.hiveserver2.jdbc.common.SPreparedStatement。(未知来源)
位于com.cloudera.hiveserver2.jdbc.common.scalableStatement。(未知来源)
位于com.cloudera.hiveserver2.jdbc.common4.c4scalablestatement。(未知来源)
位于com.cloudera.hiveserver2.jdbc.jdbc41.S41CallableStatement。(未知来源)
位于com.cloudera.hiveserver2.jdbc.jdbc41.JDBC41ObjectFactory.createCallableStatement(未知源)
位于com.cloudera.hiveserver2.hive.jdbc41.HiveJDBC41ObjectFactory.createCallableStatement(未知源)
位于com.cloudera.hiveserver2.jdbc.common.SConnection.prepareCall(未知源)
callableStatement(TestMethods.java:263)
在HiveJdbcGeneralTest.testTableCreation(HiveJdbcGeneralTest.java:113)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
在

从错误消息中,我认为您正在尝试为Hive编写存储过程。 在本例中,您可以看到HPL/SQL!=PL/SQL。
可以找到存储过程的正确语法。

请阅读,我尝试按照指南进行编辑,但在声明函数名称后不理解“AS”的用法。一个错误是修复了total(原始字符串)后的分号!同样的错误仍然存在;但是,在阅读错误消息和引用时,我认为应该有一些东西,比如
CREATE FUNCTION[db_name.]FUNCTION_name作为class_name[使用JAR | FILE | ARCHIVE'FILE_uri'[,JAR | FILE | ARCHIVE'FILE_uri']我想我有点不明白为什么有必要这样做,因为这是一个(数据库)存储过程,执行一个相当简单的函数。除非返回是指变量名,而as是指变量的返回类型
    java.sql.SQLException: [Cloudera][JDBC](11420) Error, parameter metadata not populated.
at com.cloudera.hiveserver2.exceptions.ExceptionConverter.toSQLException(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common.SPreparedStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common.SCallableStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common4.C4SCallableStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.jdbc41.S41CallableStatement.<init>(Unknown Source)
at com.cloudera.hiveserver2.jdbc.jdbc41.JDBC41ObjectFactory.createCallableStatement(Unknown Source)
at com.cloudera.hiveserver2.hive.jdbc41.HiveJDBC41ObjectFactory.createCallableStatement(Unknown Source)
at com.cloudera.hiveserver2.jdbc.common.SConnection.prepareCall(Unknown Source)
at TestMethods.callableStatement(TestMethods.java:263)
at HiveJdbcGeneralTest.testTableCreation(HiveJdbcGeneralTest.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at