标签: plsql

找出PL/SQL过程的名称

Oracle中的PL/SQL过程能否知道它自己的名字?

让我解释:

CREATE OR REPLACE procedure some_procedure is
    v_procedure_name varchar2(32);
begin
    v_procedure_name := %%something%%;
end;
Run Code Online (Sandbox Code Playgroud)

%%something%%执行,变量v_procedure_name应该包含"SOME_PROCEDURE".如果它包含object_id该过程也没关系,所以我可以查找名称all_objects.

oracle plsql

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

PLSQL JDBC:如何获取最后一行ID?

什么是PLSQL(Oracle)相当于这个SQL服务器片段?

BEGIN TRAN
INSERT INTO mytable(content) VALUES ("test") -- assume there's an ID column that is autoincrement
SELECT @@IDENTITY
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

在C#中,您可以调用myCommand.ExecuteScalar()来检索新行的ID.

如何在Oracle中插入新行,让JDBC获取新ID的副本?

编辑: BalusC提供了一个非常好的起点.由于某种原因,JDBC不喜欢命名参数绑定.这给出了"错误设置或注册的参数"SQLException.为什么会这样?

        OracleConnection conn = getAppConnection();
        String q = "BEGIN INSERT INTO tb (id) values (claim_seq.nextval) returning id into :newId; end;" ;
        CallableStatement cs = (OracleCallableStatement) conn.prepareCall(q);
        cs.registerOutParameter("newId", OracleTypes.NUMBER);
        cs.execute();
        int newId = cs.getInt("newId");
Run Code Online (Sandbox Code Playgroud)

java oracle plsql jdbc

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

PL/Sql程序vs功能?

我试图查看pl/sql过程和函数之间的区别,并找到链接http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030.首先让我告诉你开发人员通常用pl/sql过程和函数做什么

1)想获得一些回报值.他可以用函数和程序来解决它.如果他想要返回单个值的函数,他可以使用return语句.如果他想要返回多个值,他可以使用inout参数来实现它.他可以使用inout参数从过程中获取返回值(不是使用return语句)

但只要他能够使用return语句或inout参数实现其意图,它对开发人员没有任何影响.

所以这里也可以互相替换.

2)他可以在功能和程序中使用DML.所以在这里他也可以使用其中任何一个来改变数据库的状态.

所以我没有得到任何具体的推理,哪一个可以在一些人可以互相替换.

我在某种程度上发现的唯一合理的原因是函数可以从SQL调用,程序不能

有人可以解释哪一个使用的时间和原因?

sql oracle plsql

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

PL/SQL为select中的每个结果插入1行

我正在编写一个PL/SQL过程,它根据输入变量执行选择,然后在select中为每个结果插入一行.由于我对PL/SQL的新意,我无法调试查询错误.我知道这一定很容易,但出于某种原因我被困在这里.谢谢你的帮助!

CREATE OR REPLACE PROCEDURE setup_name_map(ranking_id IN NUMBER, class_string IN VARCHAR2) 
IS
BEGIN

    FOR rec IN (SELECT NAME_ID FROM PRODUCT_NAMES WHERE NAME = class_string)
    LOOP
        EXECUTE IMMEDIATE 'INSERT INTO NAME_RANKING (NAME_ID, RANKING_ID) VALUES (' || rec.NAME_ID || ', ' || ranking_id || ')';
    END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

根据Oracle Developer Compiler ...'NAME_ID'是无效的标识符.我试过把它放在引号中,但没有骰子.它还抱怨循环索引变量'REC'的使用无效.任何帮助深表感谢.

plsql for-loop procedure insert

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

如何在PL/SQL的新行中打印输出?

如何在PL/SQL中打印新行?我正在使用C语言中类似'\n'的东西.

例:

begin

    dbms_output.put_line('Hi, good morning friends');

end;
Run Code Online (Sandbox Code Playgroud)

我需要的输出是这样的:

hi,
good 
morning
friends
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

18
推荐指数
5
解决办法
16万
查看次数

在pl/sql过程中声明变量时出现语法错误

这让我有点生气.我试图将一个变量添加到一个过程,但它没有工作 - 我刚收到此错误消息:

[错误]语法检查(25:7):ERROR第25行,第7列,结束_行25,结束_col 12,找到'号码',期望:; - 或 - ..:= DEFAULT NOT NULL - 或 - % - 或 - (.@

我在下面敲了一个非常基本的程序来解决这个问题,现在我完全陷入了困境,因为我看起来像是在做我所做的事情.为什么我不能声明如下所示的变量?我通常在SQL Server中编码,如果这是我的问题的任何线索.非常感谢有人可以提供帮助!

CREATE OR REPLACE PROCEDURE MRCS.pro_xxx_test1 (cats out sys_refcursor)
IS

declare

spoon number;

balls varchar2(3);

BEGIN

 open cats for select * from dual;

   end;

/
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

当"其他人提升"做某事时是否有例外?

作为PL/SQL中的新手,我一直在复制并粘贴以下触发器:

CREATE OR REPLACE TRIGGER FOO_TRG1
    BEFORE INSERT
    ON FOO
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
BEGIN
    IF :NEW.FOO_ID IS NULL THEN
        SELECT FOO_SEQ1.NEXTVAL INTO :NEW.FOO_ID FROM DUAL;
    END IF;

    EXCEPTION
        WHEN OTHERS THEN RAISE;
END FOO_TRG1;
/
ALTER TRIGGER FOO_TRG1 ENABLE;
Run Code Online (Sandbox Code Playgroud)

我怀疑所包含的异常处理代码什么都不做,可能只是被删除,因为如果出现问题,我会收到一条错误消息.我对吗?

(我猜这样的代码是进一步编辑先前代码的结果.)

oracle plsql oracle10g

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

在COALESCE中使用SELECT

如何更正以下SQL代码,特别是COALESCE部分?

insert into Stmt G (ID,blah,foo)
select
coalesce(SELECT ID FROM Stmt G WHERE G.CLAIMNO=C.CLNUMBER, select StmtSeq.nextval from dual),
c.blah,
d.foo
from claim c
left join d on ...;
Run Code Online (Sandbox Code Playgroud)

如果ClaimNo匹配,我将从Stmt表中获取ID,否则创建一个新ID.SQL中不允许这样做吗?我怎么能写这个陈述?

我现在正在coalesce部分出现"Missing Expression"错误.

sql oracle plsql oracle-sqldeveloper

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

Oracle Error PLS-00323:子程序或游标在包规范中声明,必须在包体中定义

有人可以帮我把我的pl/sql程序放在一个包中吗?我试过了,我正在努力:

这就是我的包装规格:

CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;

--
Run Code Online (Sandbox Code Playgroud)

这是我的包体,我遇到了问题:

  CREATE OR REPLACE PACKAGE BODY film_pkg
IS
   PROCEDURE get_films (fname    IN     film.title%TYPE,
                        r_date      OUT film.release_date%TYPE,
                        dur         OUT film.duration%TYPE)
   AS
   BEGIN
      SELECT release_date, duration
        INTO r_date, dur
        FROM FILM
       WHERE title = fname;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         r_date := '';
         dur := '';
   END get_films;
END film_pkg;
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮我修复错误,我会很感激:

Error(4,11): PLS-00323: subprogram or cursor 'GET_FILMS' is declared in a package specification and must be defined …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql stored-procedures packages

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

如何访问PL/SQL存储过程的AST(抽象语法树)?

当Oracle编译存储过程时,它以DIANA格式存储该过程的AST.

  • 我怎样才能访问这个AST?
  • 是否有用于处理此AST的内置工具?

oracle syntax plsql

18
推荐指数
1
解决办法
1120
查看次数