我将此函数存储在db.system.js中
function SomeFunc(o) {
x = db.Collection;
while( 1 ) {
var c = x.find({},{_id:1}).sort({_id:-1}).limit(1);
var i = c.hasNext() ? c.next()._id + 1 : 1;
o._id = i;
x.insert(o);
var err = db.getLastErrorObj();
if( err && err.code ) {
if( err.code == 11000 /* dup key */ )
continue;
else
print("unexpected error inserting data: " + tojson(err));
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在PHP中
print_r(
$db->execute("SumeFunc(o)", array("name" => "test"))
);
Run Code Online (Sandbox Code Playgroud)
错误
Array
(
[errno] => -3
[errmsg] => invoke failed: JS Error: …Run Code Online (Sandbox Code Playgroud) 假设有一个企业级应用程序,拥有数百万用户群和每天数百万次交易。性能虎钳,这会更好。
PS:当我说企业应用程序开发时,我的意思是从开发人员的角度来看,我们有不同的抽象层。测试框架。部署在多个刀片上的自动化测试和广泛的调试等
java performance plsql stored-procedures java-stored-procedures
我有一个 java 存储过程,我试图将一个 byte[] 数组插入到表中的 oracle blob 字段中。
我按如下方式创建了一个准备好的语句,但是当我执行准备好的语句时它会随机失败。我已经缩小了问题来自 pstmt.setBytes(4,content) 的范围。我得到的错误是:
ORA-01460: 请求的转换未实现或不合理。
private static void insertFile(Connection connOracle, int zipFileId, byte[] data, String filepath, String filename ) throws SQLException {
try {
String QUERY = "INSERT INTO files(file_id, zip_file_id, filename, file_path, content) VALUES(SEQ_FILE_ID.nextval,?,?,?,?)";
PreparedStatement pstmt = connOracle.prepareStatement(QUERY);
pstmt.setInt(1,zipFileId);
pstmt.setString(2, filename);
pstmt.setString(3, filepath);
pstmt.setBytes(4, data);
System.out.println("INSERTING file_id " + filepath + ", " + filename + " INTO DATABASE");
pstmt.execute();
pstmt.close();
}
catch (SQLException e) {
throw new SQLException(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud) 这是一个直截了当的问题:您是否知道Java存储过程是否比Oracle数据库中的PL/SQL慢?
我们已经将存储过程从PL/SQL迁移到Java只是为了对它进行基准测试,它的时间大约是PL/SQL的两倍.这也是你的体验吗?
谢谢.
我创建了一个存储过程,它返回结果行和两个输出参数。我无法找到任何春从事情,我可以得到ResultSet和outPutParameters。我想实现像
这样使用Spring框架。
spring resultset jdbctemplate output-parameter java-stored-procedures
要在 Java 中仅使用简单的 JDBC 调用 Oracle 的存储过程,我们可以这样做:
con.prepareCall("{ call ? = my_procedure(?) }");
callStm.registerOutParameter(1, Types.INTEGER);
callStm.setInt(2, -100);
callStm.execute()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能在一个语句中调用多个过程prepareCall?例如:
con.prepareCall("{ call prepare_proc(); ? = my_procedure(?) }");
Run Code Online (Sandbox Code Playgroud)
当然这是无效的,但是如何修复它并一次性调用两个或多个程序呢?
我正在尝试在oracle中使用第三方java库.该库似乎有相同的1.4版本的JVM,我们的Oracle 10g服务器主机的兼容,因为它运行Oracle的罚款之外,所以我觉得我应该能得到这个工作.这个库最终使基于SOAP的HTTP请求,我也得到类解析错误,当我在Oracle中运行.
这是一条显示差异的线:
Class msgfact = Class.forName("com.sun.xml.messaging.saaj.soap.MessageFactoryImpl");
Run Code Online (Sandbox Code Playgroud)
我尝试使用loadjava实用程序将这些库注册到Oracle中,我得到了我认为是成功的结果:
C:\>loadjava -verbose -schema MYUSER -user MYUSER/MYPWD@dbinstance -force saaj-impl.jar
看起来所有东西都被加载了,我可以在该列表中看到这个MessageFactoryImpl类.但后来我尝试从Oracle SQL运行这行代码(在我编写的另一个类中并使用loadjava加载),此行抛出一个ClassNotFoundException(java.lang.ClassNotFoundException:com/sun/xml/messaging/saaj/soap/MessageFactoryImpl ).
然后我回去尝试在loadjava命令行添加"-resolve"开关.它就像这些saaj类正在注册,但它们没有正确解析.
如何成功地将这些saaj类放入Oracle中,或者如果由于某种原因Oracle已经加载了这些类,那么如何说服我自己的代码成功使用现有类?
FWIW,我已经采取措施确保授予适当的套接字权限,并且我的代码可以成功地向目标URL发出通用的http请求.它只是在使用库的SOAP栈来实现它时遇到了麻烦.
编辑:这是我的loadjava结果的示例.这似乎正好显示了什么是失败的,但我很困惑为什么这些特定类在解决前步骤中似乎得到正确处理时没有得到解决.我在这里删除了大约80%的文件,但还有其他类显示相同的类解决问题.
arguments: '-verbose' '-schema' 'MYSCHEMA' '-user' 'MYSCHEMA/MYSCHEMA@actest' '-resolve' '-force' 'saaj-impl.jar' [snip] creating : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/EnvelopeFactory loading : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/EnvelopeFactory creating : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/GifDataContentHandler loading : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/GifDataContentHandler creating : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/JpegDataContentHandler loading : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/JpegDataContentHandler creating : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/MessageFactoryImpl loading : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/MessageFactoryImpl creating : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/MessageImpl loading : class MYSCHEMA.com/sun/xml/messaging/saaj/soap/MessageImpl [snip] resolving: class MYSCHEMA.com/sun/xml/messaging/saaj/soap/AttachmentPartImpl resolving: class …
我在 Spring Boot 中使用 Oracle 存储过程,它有一些 IN/OUT 参数。
当我获取输出参数时,它会抛出异常invalidDataAccessApiUsageException: OUT/INOUT Parameter is not available: ent_mensaje.
这是存储过程的定义
create or replace PROCEDURE fon_anula_programacion (
ent_numero_operacion IN NUMBER,
ent_numero_fisico IN VARCHAR2,
ent_mensaje IN OUT VARCHAR2,
ent_canal_origen IN OUT VARCHAR2,
ent_senal_proceso IN OUT VARCHAR2,
ent_senal_commit IN OUT VARCHAR2,
ent_sw_pos IN OUT NUMBER
) IS
...
Run Code Online (Sandbox Code Playgroud)
实体类及其 @NamedStoredProcedureQuery
@Getter
@Setter
@Entity
@NoArgsConstructor
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "Valores.AnularAdicionFondoSif",
procedureName = "FON.FON_ANULA_PROGRAMACION",
resultClasses = DTOAnularAdicionSIF.class,
parameters = {
@StoredProcedureParameter(name = "ent_numero_operacion", type = BigDecimal.class, mode = ParameterMode.IN), …Run Code Online (Sandbox Code Playgroud) 我有一个有趣的要求.
我们需要在Java存储过程中进行命令行交互.尽管使用dbms_java.grant_permission命令授予适当的权限,我遇到了java.io.IOException,我从System.in使用中读取java.io.InputStreamReader.
问题出在哪儿?
Java Source在这里:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.driver.OracleDriver;
public class ExecuteInteractiveBatch {
public static void aFunction() {
Connection connection = null;
try {
int rowFetched = 0;
connection = new OracleDriver().defaultConnection();
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT count(1) cnt from sometable where c = 2");
int count = 0;
if (rs.next()) {
count = rs.getInt(1);
}
rs.close(); …Run Code Online (Sandbox Code Playgroud) 我的Oracle数据库中有一个Java存储过程,我需要知道谁调用了它.我想根据调用它的人做不同的事情.我在网上搜索了这个,但我没有运气.
Hy all,
这是我关于stackoverflow的第一个问题,所以如果出现问题请告诉我.Howerver,我需要知道是否可以从DB2下的Java存储过程读取使用COBOL程序中声明的DD名称定义的数据集.
程序流程是: - 一个JCL调用一个STORED PROCEDURE - STORED PROCEDURE调用jar - jar尝试通过DD名称打开数据集
我试图从jZos库中使用ZFile类,但Java代码既不能在z/OS上看到DD名称和相关文件.我的疑问是:无法完成此任务,因为DB2上的JVM在隔离环境中运行,或者有特定的类/过程来访问数据集?
提前致谢!
java ×7
oracle ×6
plsql ×2
spring ×2
cobol ×1
db2-zos ×1
jdbc ×1
jdbctemplate ×1
loadjava ×1
mongodb ×1
mongodb-php ×1
oracle10g ×1
performance ×1
php ×1
resultset ×1
spring-boot ×1