标签: procedure

Oracle过程是否继承了其创建者的权限?

我有3个Oracle用户A,B,C,并希望使用B(作为中间)将表从C导入到A.当连接到B时,我可以运行"从T1 @ C创建表A.T1作为select*" .但是当我将sql语句放入B创建/拥有的过程中时,我不断获得"ORA-01031:权限不足".作为sysdba,我已将所有权利(dba)授予B.所以我在这里缺少什么?谢谢.

oracle privileges procedure

2
推荐指数
1
解决办法
1083
查看次数

如何将oracle过程的参数默认设置为select的结果?

我有一个oracle过程,我想将默认参数设置为select语句的结果,如下所示.

procedure foo( startID number : = max(x.id) from xtable x )
Run Code Online (Sandbox Code Playgroud)

但上面的代码是非法的语法.

oracle stored-procedures procedure

2
推荐指数
1
解决办法
1万
查看次数

pl/sql循环记录选择oracle plsql

我有一个select语句,我试图循环并根据select语句的条件递增一个变量,然后返回变量作为一个out所以我可以在一些前端代码中用它做一些事情.我正在使用oracle 11g,我正在看到一些方法可以做到这一点......但我不确定哪种方式最好.我有一些我想在下面做的事情,但由于混乱而再次停止.

首先我设置我的proc和'in variable'

PROCEDURE SEEKER (pMonkeyID IN Number, vMarkCounter OUT Number)
AS
BEGIN

CURSOR seeker_cur IS
    Select Mokney_approved, Monkey_vaulted 
    from MonkeyBookApps 
    where MonkeyID = pMonkeyID
    and Monkey_doc_type = 'BANANA' 
    order by docu_approv_timestamp,monkey_doc_type,monkey_doc_approved desc

OPEN seeker_cur;

begin

   OPEN Seeker_cur;
   vMarkCounter := 0;
Run Code Online (Sandbox Code Playgroud)

这是我不确定的部分.如果条件不满足,我应该循环然后退出,还是应该执行if语句并以某种方式确定是否有可能大于1的记录?如果是这样,那将如何运作?一种方式比另一种方式有益处吗?所以...我要sudo-code我要做的事情(下面):

FOR (however many records) in Seeker_cur
IF seeker_cur (not found) or (returns no records)

EXIT or (break for loop);
ELSE
LOOP

vMarkCounter := vMarkCounter + 1;

EXIT WHEN seeker_cur is out of records (somehow)
END …
Run Code Online (Sandbox Code Playgroud)

conditional plsql for-loop procedure oracle11g

2
推荐指数
1
解决办法
3万
查看次数

PL/SQL过程字符参数

这很可能是一个非常愚蠢的问题,但我已经尝试过搜索并回答空洞.

我正在编写一个采用CHAR类型参数的过程.即:

  CREATE PROCEDURE Proc1 (Param1 CHAR(5))
  AS
  BEGIN
    ...
  END;
Run Code Online (Sandbox Code Playgroud)

这不起作用,并在CHAR(5)区域周围抛出错误.如果我没有为参数指定大小,那么只需将其保留为CHAR它就可以正常工作.我尝试过包含关键字IN,但这并没有什么区别.

无论如何在PL/SQL过程中指定参数的大小?

sql plsql stored-procedures procedure oracle10g

2
推荐指数
1
解决办法
8665
查看次数

无法从PL/SQL中的过程中检索错误

我开始使用PL/SQL并学习如何编写procedures,exceptions但我似乎无法掌握如何显示错误.这个过程很简单,它只能做简单的数学运算,如下所示:

create or replace
procedure get_simple_math
  (n_num1 in number,
   n_num2 in number,
   n_answer out number,
   n_err_code out number,
   n_err_msg out varchar2)
as
begin
  n_answer := (n_num1 / n_num2);
  dbms_output.put_line('Answer is '||n_answer);

  n_err_code := 0;
exception
  when others
  then
    n_err_code := SQLCODE;
    n_err_msg := 'Error in get_simple_math '||SQLERRM;
    raise_application_error (-20002,n_err_msg);
end get_simple_math;
Run Code Online (Sandbox Code Playgroud)

正如你可以看到它没什么特别的,但我不能让我的生活得到block运行:

set serveroutput on
declare
  n_answer number := 0;
  n_err_code number;
  n_err_msg varchar2;
begin
  get_simple_math(10,5,n_answer);
end;
Run Code Online (Sandbox Code Playgroud)

我假设我需要声明设置的变量out,这就是为什么它们在那里.我也尝试将它们添加到procedure执行中:

get_simple_math(10,5,n_answer,n_err_code,n_err_msg);
Run Code Online (Sandbox Code Playgroud)

但这似乎没有诀窍,所以我只是在寻找解决这个问题的一些帮助.提前致谢.

plsql exception procedure

2
推荐指数
1
解决办法
1579
查看次数

程序中的MySQL WHERE条件被忽略

我试图用参数创建一个过程.但是当我在某种WHERE情况下使用它们时,就好像从来没有那样.他们完全被忽略了.

DELIMITER //

DROP PROCEDURE IF EXISTS p //

CREATE PROCEDURE p (IN player TEXT, OUT num INT)
BEGIN
  SELECT COUNT(*) INTO num FROM `sg_playerstats` WHERE `player` = player; 
END

//

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

Num正确填充,但无论我放入播放器,结果总是66.(该表有66行!)

我究竟做错了什么???

mysql sql select procedure

2
推荐指数
1
解决办法
507
查看次数

如何执行字符串作为过程

我在运行时制作了按钮组件,我想要点击每个按钮执行独特的程序.

例如

exec('showmessage('+quotedstr('hello word')+');');
Run Code Online (Sandbox Code Playgroud)

如何在delphi 7中执行字符串作为过程,如php中的eval或delphi xe3中的livebinding?

delphi procedure

2
推荐指数
1
解决办法
1687
查看次数

PLOP中的PL/SQL EXECUTE IMMEDIATE(截断模式中所有表的过程)

我需要创建一个过程,它将从一个模式中的表中删除所有数据.我尝试过类似的东西

CREATE OR REPLACE PROCEDURE CLEAR_ALL
IS
  sql_truncate VARCHAR2(50);

  cursor c1 is
   SELECT table_name
   FROM all_tables 
   WHERE owner = 'KARCHUDZ_S';
BEGIN
  sql_truncate := 'TRUNCATE TABLE :text_string';
  FOR table_name in c1
   LOOP
      EXECUTE IMMEDIATE sql_truncate USING table_name;
   END LOOP;
END CLEAR_ALL;
Run Code Online (Sandbox Code Playgroud)

但它给了我两个我无法理解和修复的错误.

错误(13,7):PL/SQL:语句被忽略

错误(13,44):PLS-00457:Statment必须是SQL的类型< - (这个错误我必须翻译,因为我使用大学Oracle 11g基础有波兰语lang)

oracle plsql procedure execute-immediate

2
推荐指数
1
解决办法
2万
查看次数

as/400:从CL调用C程序

as/400 ILE允许将来自不同语言的过程编译成模块,然后绑定在一起以制作单个程序.我正在尝试使用包含从我的CL模块调用的C函数的模块来完成此操作,该模块是入口模块.

C模块源:mylib/myfile/csource

int getValue(void){
    return 20;
}
Run Code Online (Sandbox Code Playgroud)

CL模块源:mylib/myfile/clsource

pgm
dcl var(&NUM) type(*INT)
callprc prc(getValue) rtnval(&NUM) /* <== Calling C function. */
endpgm
Run Code Online (Sandbox Code Playgroud)

然后我将每个文件编译成自己的模块.

crtcmod module(cmodule) srcfile(myfile) srcmbr(csource)
crtclmod module(clmodule) srcfile(myfile) srcmbr(clsource)
Run Code Online (Sandbox Code Playgroud)

这两个编译,没问题.只是,当我尝试从这两个模块创建程序时,ILE绑定器抱怨CL源中的函数getValue未定义,程序创建失败.

crtpgm pgm(mypgm) module(clmodule cmodule) entmod(clmodule) detail(*basic)
Run Code Online (Sandbox Code Playgroud)

crtpgm给我的错误:

Unresolved references........................: 1

Symbol    Type        Library        Object        Linked        Name
          *MODULE     mylib          clmodule      *YES          getValue
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

module procedure call ibm-midrange

2
推荐指数
1
解决办法
352
查看次数

如何在数组中保存过程地址然后在Delphi中使用它们

我有Tsqlquery,大多数字段使用事件Onchange.我需要在运行时以硬编码方式切换它们(例如Table.fieldbyname('ABC').Onchange:= Nil;)之后我需要打开它们(例如Table.fieldbyname('ABC'). Onchange:= TableABCChange;)我确实尝试使用指针数组并使用它如下:

var P:array [1..100] of Pointer;
begin
for i:=0 to Table.fields.count-1 do
 begin
    {save and switch them off} 
    P[i]:=@Table.fields[i].Onchange; 
    @Table.fields[i].Onchange:=Nil;
 end;
Run Code Online (Sandbox Code Playgroud)

但我不知道如何打开它们

for i:=0 to Table.fields.count-1 do
 begin
    {restore and switch them on} 
    Table.fields[i].Onchange:=P[i]; <---- ERROR
 end;
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

delphi procedure restore save memory-address

2
推荐指数
1
解决办法
121
查看次数