无法从Sqoop调用Oracle存储过程

时间:2017-11-27 15:40:17

标签: oracle hadoop stored-procedures sqoop

我想从Sqoop调用Oracle存储过程但是我收到错误。我必须调用存储过程的函数,并且需要传递参数。

$: sqoop import --connect jdbc:oracle:thin:@localhost:1512/db --username userA --password password --call Oracle_Schema.pkg_table_maintenance.sf_drop_index('TBL_A_%','Group_id')

-bash: syntax error near unexpected token `('

$: sqoop import --connect jdbc:oracle:thin:@localhost:1512/db --username userA --password password --call "Oracle_Schema.pkg_table_maintenance.sf_drop_index('TBL_A_%','Group_id')"

Warning: /opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p1246.1021/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
17/11/27 10:31:31 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5-cdh5.4.7
17/11/27 10:31:32 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
17/11/27 10:31:32 ERROR tool.BaseSqoopTool: Error parsing arguments for import:
17/11/27 10:31:32 ERROR tool.BaseSqoopTool: Unrecognized argument: --call
17/11/27 10:31:32 ERROR tool.BaseSqoopTool: Unrecognized argument: Oracle_Schema.pkg_table_maintenance.sf_drop_index('TBL_A_%','Group_id')

有人可以帮忙!

3 个答案:

答案 0 :(得分:1)

Sqoop只允许您在导出时调用sql过程,而不是在导入时调用。

答案 1 :(得分:0)

如果你的存储过程通过sqoop-import进行某种选择导入无效,那么sqoop import就不具备这种灵活性。

但是如果你的存储过程正在进行某种清理操作,你可以使用下面的sqoop eval实用程序

sqoop eval --connect jdbc:oracle:thin:@localhost:1512/db --username userA --password password --query "EXECUTE Oracle_Schema.pkg_table_maintenance.sf_drop_index('TBL_A_%','Group_id')"

- 查询“将执行查询,就好像您在oracle数据库中运行一样,您可以使用与将从oracle客户端应用程序/命令行使用的相同SQL语法”

答案 2 :(得分:0)

您可以通过使用Sql * plus方法执行Sqoop中的存储过程来执行存储过程:BEGIN STORED_PROCEDURE; END;

sqoop eval -Dmapred.job.queue.name=root.test.test-mis \
 --connect jdbc:oracle:thin:@SERVER.NAME:PORT:INSTANCE --password **** \
 --username MYSCHEMA --query "BEGIN MYSCHEMA.TEST_STORED_PROCEDURE_NAME; END;"