标题非常清楚:在C#应用程序中,使用ODP.NET,我试图调用一个PL/SQL函数,它不是返回一个简单的值,而是返回一个记录。
不幸的是,我没有权限添加或更改PL/SQL代码,因此尝试将函数封装到返回不同类型的另一个函数中对我来说不是一个选项。
下面是一个简化的例子..。
PL/SQL:
CREATE OR REPLACE PACKAGE FOO_PACKAGE AS
TYPE FOO_RECORD IS RECORD (
BAR VARCHAR2(50),
BAZ VARCHAR2(50)
);
FUNCTION FOO_FUNCT
我正在尝试编写一个存储过程来重新编译在DB2中创建的所有PL/SQL包。
我有许多PL/SQL包,其中引入了多个存储过程。例如,
create or replace package packagename
is
procedure procedurename;
end packagename;
我想从其他包中的存储过程编译这些包,因为有一些存储过程会改变表的定义,如向表中添加列等。为了避免任何缓存问题,我希望重新编译它们。
有没有办法以编程方式编译这样的存储过程?
我需要编写PL SQL,通过DB链接从另一个数据库获取数据,并对其执行一些操作。
DECLARE
CURSOR cur_progs
IS
SELECT *
FROM allen.table_dummy@db_link;
BEGIN
...
...
END;
/
在上面的例子中,我遇到了两个问题。
未创建链接时,将抛出以下错误消息
ORA-04054: database link db_link does not exist
如果链接存在,但用于创建链接的用户的密码现在已过期,则会抛出以下错误消息
ORA-04052: error oc
我试图在VB应用程序中运行几个PL/SQL过程。这些过程需要一段时间才能运行,所以我打算将它们放在单独的线程中(这是我刚开始学习的主题)。
当前,每个线程调用一个函数,该函数依次调用以下代码:
' Function getDataSet
' builds a data set from given information
' Parameters:
' aCommand - the PL/SQL procedure to call
' aParamCollection - an oraParameterCollection object cont
我有一个非常大的“Where”语句,它的长度超过了允许的最大值。
目前,我在vb.net代码中构建完整的sql并执行它。
问题是这种方式很慢,因为它不是一个编译的查询。
还有没有别的办法呢?
编辑:
For i As Integer = 0 To List.Count - 1
If Filter = String.Empty Then
Filter = " Where OrderID = "
Else
Filter += " OR OrderID ="
End I
我有下面的PL/SQL块,它工作得很好。我想从另一个PL/SQL块调用这个函数(TimeToFrame)。
我不能在存储在DB中的过程或包中声明此函数。换句话说,如果pl/sql和pl/sql都是匿名块,我如何从另一个pl/sql调用pl/sql?
如果我把这个函数放在一个单独的.sql文件中会怎么样?我不能从我的匿名块中调用那个.sql文件,并给它传递一些IN参数,然后让那个函数返回OUT参数吗?
Declare
nTime Number;
FUNCTION TimeToFrame(pTime IN Varchar2)
return NUMBER IS
nTime NUMBER;
BEGI
我在Oracle数据库中有一个PL/SQL过程。该过程涵盖脚本末尾的例外情况;
EXCEPTION WHEN OTHERS THEN
v_error_text := 'Error case';
v_error_text变量是一个out参数,用于在java端记录异常。我从java web应用程序中调用这个脚本。有时,它会抛出异常,不是从Oracle端,而是从java。
java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
O
有没有办法通过使用存储过程来防止sql注入?
我有一个sql查询,如
select column name from table where field ='@value'
cmd.parameters.add('@value', value);
我使用的是权限最小的参数化查询。如何编写基本的存储过程来防止sql注入。这有可能吗?
我有一个存储的进程,它可以使用BCP将文件写入网络驱动器,方法是在数据库服务器上创建一个映射到另一个服务器上的共享驱动器的临时驱动器。它工作正常,但是,我从最后的EXEC命令返回一个错误,它说There are open files and/or incomplete directory searches pending on the connection to U:.我猜它试图在完成文件写入之前执行删除驱动器命令。如果我在运行proc之后运行该语句,它将成功删除该驱动器。下面是这个过程:
CREATE PROCEDURE dn_ExportFile
@ServerName varch
简单地使用下面的命令查询正在运行的作业
select * from dba_jobs_running;
在我的sqldevelopers SQL控制台中执行时运行良好。
但是,当过程中有完全相同的语句时,它就不起作用了。编译失败,出现
PL/SQL: ORA-00942: table or view does not exist
有什么想法吗?有没有需要考虑的范围之类的东西?
任何建议都是非常感谢的,提前感谢:)
我正在尝试编写简单的PL/SQL过程来在Oracle Schema中重建索引。
代码在作为PL/SQL匿名块编写和执行时运行良好,但在作为PL/SQL过程编写和执行时抛出错误。
请看一看,并回应任何关于如何解决这个小难题的陷阱或建议。
--IDX_REBUILD: Anonymous Block
set timing on;
SET SERVEROUTPUT ON;
DECLARE
CURSOR Index_Cur IS
SELECT owner, index_name
FROM cjb_indexes
WHERE (owner li