我有3个Oracle用户A,B,C,并希望使用B(作为中间)将表从C导入到A.当连接到B时,我可以运行"从T1 @ C创建表A.T1作为select*" .但是当我将sql语句放入B创建/拥有的过程中时,我不断获得"ORA-01031:权限不足".作为sysdba,我已将所有权利(dba)授予B.所以我在这里缺少什么?谢谢.
我有一个oracle过程,我想将默认参数设置为select语句的结果,如下所示.
procedure foo( startID number : = max(x.id) from xtable x )
Run Code Online (Sandbox Code Playgroud)
但上面的代码是非法的语法.
我有一个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) 这很可能是一个非常愚蠢的问题,但我已经尝试过搜索并回答空洞.
我正在编写一个采用CHAR类型参数的过程.即:
CREATE PROCEDURE Proc1 (Param1 CHAR(5))
AS
BEGIN
...
END;
Run Code Online (Sandbox Code Playgroud)
这不起作用,并在CHAR(5)区域周围抛出错误.如果我没有为参数指定大小,那么只需将其保留为CHAR它就可以正常工作.我尝试过包含关键字IN,但这并没有什么区别.
无论如何在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)
但这似乎没有诀窍,所以我只是在寻找解决这个问题的一些帮助.提前致谢.
我试图用参数创建一个过程.但是当我在某种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行!)
我究竟做错了什么???
我在运行时制作了按钮组件,我想要点击每个按钮执行独特的程序.
例如
exec('showmessage('+quotedstr('hello word')+');');
Run Code Online (Sandbox Code Playgroud)
如何在delphi 7中执行字符串作为过程,如php中的eval或delphi xe3中的livebinding?
我需要创建一个过程,它将从一个模式中的表中删除所有数据.我尝试过类似的东西
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)
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)
我错过了什么?
我有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)
我该怎么办?