Tag: plsql

从Java调用PL / SQL函数时的“SQLException:ORA-06550”

我想使用Java从数据库中检索数据并显示它,所以我创建了这个PL / SQL函数,它返回一个游标: create or replace function std_getInfoFunc return types.cursortype as my_cursor types.cursorType; begin open my_cursor FOR SELECT s.FirstName, s.LastName, s.Address, s.City, s.Province , s.PostalCode, c.CourseName FROM Students s, Courses c, StudentAndCourses cs Where s.StudentID = cs.StudentID AND c.CourseID = cs.CourseID; Return my_cursor; end; 在我的Java代码中,我调用函数如下: try{ CallableStatement cst=connection.prepareCall(“{? = call std_getInfoFunc}”); cst.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); cst.execute(); res=(ResultSet) […]

如何确定Oracle中给定字符串的语言(英文,中文…)?

如何确定Oracle(多语言环境)中给定sting(表列值)的语言(英语,中文…)?

检索匿名PLSQL块结果

我在java中检索匿名PLSQL块的结果时遇到了一些麻烦。 这是块: DECLARE in_cnt_date DATE := ‘&1’; hv_cnt_id NUMBER := 0; BEGIN DBMS_OUTPUT.ENABLE (NULL); INSERT INTO dt_contexts (CNT_ID, CNT_CONTEXT, CNT_TYPE, CNT_SOURCE, CNT_COMMENT, CNT_DATE, CNT_DATE_INSERT, CNT_DATE_UPDATE) VALUES (0, ‘EPE_CONTEXT’, ‘ROUTE’, ‘bdd’, ‘Built from ROUTE’, in_cnt_date, SYSDATE, SYSDATE); SELECT SEQ_DT_CNT_ID.CURRVAL INTO hv_cnt_id FROM DUAL; EXCEPTION WHEN OTHERS THEN RAISE ; END; 我把该查询放在一个字符串中: public static final String CONTEXT […]

从java中的plsql函数获取返回的记录类型

我有一个plsql函数返回记录类型challan_rec 。 create or replace package xx_bal_api as type challan_rec is record ( challan_number varchar2(40), challan_amount number ); FUNCTION get_challan(foo number) return challan_rec; end; create or replace package body xx_bal_api as FUNCTION get_challan(foo number) return challan_rec is cr challan_rec; begin cr.challan_number := ‘00002154215’; cr.challan_amount := 2265; return cr; end get_challan; end; 我想从java代码中调用此函数并在java中获取该记录类型。 请指导我如何做到这一点。 谢谢

如何同步PL / SQL调用的java方法

我只是遇到了一个与并发相关的问题,其逻辑流程是当客户端(称为Oracle Forms)提交请求(称为并发程序)并调用plsql过程时,此过程最终将调用java静态方法。 我发现当我在同一时间或非常短的间隔(如1秒)内提交两个请求时,会注意到一些并发问题。 java方法是做一些事情的起点,从数据库中搜索建议应该将哪些记录插入到数据库中。 问题是,它们会导致重复的结果,因为当我查询时,两个请求都可以很好地插入新记录。 我试过在静态java方法中添加synchronized ,但这并没有解决这个问题,为什么呢? 我所做的是: public static synchronized void execute 请注意,插入将在plsql中调用,这意味着如果仅同步java方法,则执行不充分的同步。 但是当我查看日志时,它会显示两个请求在同一秒内运行,我不认为这是正常的! 因为查询数据库和做建议是耗时的。 为了使java方法非常耗时,我添加了一个代码调用Thread.sleep(5000) ,并记录此代码后的时间并记录线程ID。 惊喜地发现Thread id是1! 而且,他们通过睡眠的时间也在同一时间。 这是为什么? 我该怎么做才能解决问题? 对java方法或pl sql的任何锁定? PS:我现在正在尝试使用DMBS_LOCK ,这似乎有效,但我仍然希望知道java方法不同步的原因。

Java-PLSQL-来自java的记录调用表

PLSQL包过程声明 TYPE custom_type IS TABLE OF single_rec_type; TYPE single_rec_type IS RECORD( //id, name etc ) 问题: 但是custom_type没有直接的Java类型表示[如OracleTypes.CLOB或OracleTypes.CURSOR ],因为custom_type是PLSQL类型而不是SQL类型。 当我用Google搜索时,我遇到了这两个选项:代表它, (1)从我们可以从java绑定的过程(或包装器PLSQL函数)创建一个SQL TYPE。 参考: java – 在oracle存储过程中传递数组 (2)将输出参数注册到我们的类型,并使用SQLData对象来表示记录。 参考: 如何在oracle中将表作为out参数获取 callableStatement.registerOutParameter(8, OracleTypes.ARRAY, “custom_type”); 这样做,我收到错误: java.sql.SQLException: invalid name pattern: MYDB_OWNER.custom_type at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:554) at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:471) 一个建议是在模式中声明custom_type TYPE,而不是在包内声明。 或者通过创建公共同义词和给予补助金。 问题 – 关于第二种方法,在模式级别声明任何自定义类型是否正确?

解析PL / SQL代码以检查语法和语义错误

请考虑以下情况: 我在UI上有一个文本区域和一个按钮 。 用户将在Text-Area中输入PL / SQL块。 当用户按下Button时 ,我想检查该块中的语法和语义错误而不执行它。 我真的想要一个解决方案,我不需要再安装任何东西。 环境信息: Java 1.6.31 Oracle数据库11g

尝试传递自定义oracle类型对象映射时,名称模式无效

Java spring自定义Oracle类型作为参数并获得以下错误。 我不明白无效名称模式是什么意思? 任何帮助赞赏。 org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: invalid name pattern: UPSELL.mkt_list_tab ### The error may involve com.comcast.upsell.dao.ProviderAndRegionalDao.getCorpsToMarketsList-Inline ### The error occurred while setting parameters ### SQL: call upsell_tx_etl_report.GET_OFFER_CORPS_TO_MARKETS( ?, ?, ? ) ### Cause: java.sql.SQLException: invalid name pattern: MY_SCHEMA.mkt_list_tab ; uncategorized SQLException for SQL []; SQL state [99999]; error code [17074]; […]

从PL / SQL调用Java

任何人都可以帮我这个:我想从Pl / SQL,Oracle RDBMS调用一个java程序,下面是设置 Windows 7机器,Java安装在C:\ Program Files \ Java \ jdk1.7.0_02上 我创建了一个目录来保存java文件。 D:\ Java,里面有一个hello.java文件。 public class Hello { public static String world() { return “Hello world”; } } 编译得很好,.class文件是在同一目录中生成的。 因为我必须使用PL / SQL调用此函数,所以这里是我编写的PL / SQL函数: create or replace FUNCTION helloworld RETURN VARCHAR2 AS LANGUAGE JAVA NAME ‘Hello.world () return java.lang.String’; 这是PL / SQL过程: create or […]

如何通过java代码执行Oracle sql脚本

我是Oracle DB的新手,并且正在使用Oracle 11g,我想通过java代码执行Oracle sql脚本。 我的SQL脚本可能包含SQL语句(DDL或DML)或PL / SQL块,所以我不想在我的java代码中解析脚本,而是希望一次性执行完整的脚本。 希望我的问题很清楚,如果不让我知道,我可以澄清。 iBatis ScriptRunner会在我的场景中工作吗?