小编A.B*_*ade的帖子

PL/SQL如何在不获取返回对象的情况下调用函数

我在PL/SQL中有一个函数:

FUNCTION do_something
  RETURN BOOLEAN
IS
  ...
BEGIN
  ...
END
Run Code Online (Sandbox Code Playgroud)

这个函数可以这样调用:

DECLARE
  answer BOOLEAN;
BEGIN
  answer := do_something();
END
Run Code Online (Sandbox Code Playgroud)

现在,有些情况下,我不需要返回的布尔值.如果我不想得到它,只需写:

do_something();
Run Code Online (Sandbox Code Playgroud)

我得到了PLS-00306(调用DO_SOMETHING时参数类型的数量错误)有没有办法在不声明和设置新布尔值的情况下调用它,在这种情况下我永远不会使用它?

oracle plsql declaration function return-value

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

在游标中定义的查询执行了多少次?

我在Oracle数据库中有一个存储过程.
在这个存储过程中,我定义了一个游标.

我使用以下方法遍历结果集:

FOR item IN cursor_name LOOP
END LOOP;
Run Code Online (Sandbox Code Playgroud)

查询执行了多少次?有没有办法让我知道?这也是最好的方法,还是应该以不同的方式迭代?

谢谢.

oracle plsql stored-procedures cursor

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

PLSQL过程在运行时获取用户输入

我正在做大学作业,要求我创建一个PLSQL程序,用户可以在其中添加包含多个项目和每个项目数量的新客户订单.我想出了以下内容,要求用户输入一些要添加到订单中的项目,然后使用循环来询问特定的详细信息,例如产品编号和数量.我在运行时遇到用户输入问题...在编译代码时,它会询问产品代码和数量,并且不会在运行时再次询问它而是保存先前在编译时给出的值...

CREATE OR REPLACE 
PROCEDURE Add_Order (Item_amount IN NUMBER, CustNo IN NUMBER) AS

    ItemNo NUMBER; 
    var_Quantity NUMBER;
    var_PONo  NUMBER;  

    BEGIN  

      IF Item_amount BETWEEN 2 AND 9 THEN

        SELECT seq_PONo.NEXTVAL INTO var_PONo from dual;

    INSERT INTO PurchaseOrder_tab
         SELECT  var_PONo, REF(C),
                 SYSDATE,
                 ItemList_tab()
          FROM   Customer_tab C
          WHERE  C.CustNo = CustNo;

    FOR i IN 1..Item_amount LOOP
        DBMS_OUTPUT.PUT_LINE('INSIDE LOOP');
        ItemNo := &Enter_ProdCode;
        var_Quantity := &Quantity_Amount;

        INSERT INTO TABLE (
        SELECT  P.ItemList
          FROM  PurchaseOrder_tab P
         WHERE  P.PONo = var_PONo
        )

        SELECT   seq_ItemNo.nextval, REF(Pr), var_Quantity
          FROM …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

如何在没有零的情况下将Oracle数值赋予.NET?

我尝试从Oracle数据库中读取数据.问题是,在某些情况下,接收数据会在数字后面添加零,我不知道为什么会发生这种情况?!?

例如,我想读这样的数据

1

1,1

1,12

1123

当我用Oracle-Datareader读取它时,我得到了

1

1,10 < -

1,12

1,1230 < -

每当小数位数为1,3,5,7长时,它会在结果中添加一个0.但为什么会发生这种情况?有谁知道这种问题?

编辑:

Dim cmd As OracleCommand = New OracleCommand(Select_Statement, Connection)

Dim dr As OracleDataReader

dr = cmd.ExecuteReader


While dr.Read()

            If dr("C1").ToString = V1 Then

                Me.Txt_1.Text = dr.GetDecimal(3).ToString("G0")

                Me.Txt_2.Text = dr(c4)

                Me.Txt_3.Text = dr(c5)

                Me.Txt_4.Text = dr(c6)


            End If

            If dr("C2").ToString = V2 Then

                Me.Txt_5.Text = dr(c3)

                Me.Txt_6.Text = dr(c4)

                Me.Txt_7.Text = dr(c5)

                Me.Txt_8.Text = dr(c6)


            End If

        End While

dr.Close()
Run Code Online (Sandbox Code Playgroud)

这是我从数据库中读取数据的方式,如果有更好的方法我会对一些提示感到高兴!因为dr.GetDecimal()的方式只排除行索引的数字.

.net c# oracle numbers decimal

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

如何及时在pl/sql中找到准确的位置(ORA-06502:PL/SQL)

我有一个select语句,需要在我的pl/sql中选择几十列到自定义变量中.如下所示:

  select col1,
         col2,
         ....
         col30
  into   var1,
         ...
         var30
  from   table
  where ....
Run Code Online (Sandbox Code Playgroud)

在执行SP时遇到错误:

ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

错误信息仅指出select语句的第一行号.即使我可以弄清楚我定义的变量太小而无法容纳列,但仍然难以精确定位错误定义的变量.这不是我调试此sp的有效方法.

有什么好主意,请告诉我.

oracle plsql

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

抑制oracle数据未找到异常

我有一个独特的场景,我需要将多个列值放入多个变量中.我面临的问题是,虽然存在一个列值,但其他列不需要存在,因此我最终得到DATA NOT FOUND异常,而我想要抑制它并将空值放入剩余的变量中.

 select nvl(A,''), nvl(B,''), nvl(C,'') 
   into A1, B1, C1  
   from SAMPLE_TABLE 
  where name ='W6';
Run Code Online (Sandbox Code Playgroud)

表中的A值可以是"hello",B的值为null,表中的C值为null.
当语句在存储过程的主体内执行时,我不希望DATA NOT FOUND Exception,而是我希望A1的值为'hello',B1为'',C1为''.我将动态地运行它并且where条件不断变化,因此我也不想打开那些多个游标.任何人都可以让我知道我怎么能做到这一点?

oracle plsql stored-procedures

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

在包中声明的oracle表的记录不能使用索引吗?

谢谢你的善意
我在包的规范中声明了记录类型和记录表,我需要使用这个表类型作为管道函数的返回.
如果我将INDEX BY(某些东西)添加到表声明中,导致管道函数中的错误编译.为什么不能使用INDEX BY?

oracle plsql

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

REGEXP_LIKE奇怪的行为

我开始对REGEXP_LIKE功能进行一些研究,这是我在oracle网站上发现的:

REGEXP_LIKE类似于LIKE条件,除了REGEXP_LIKE执行常规>表达式匹配而不是LIKE执行的简单模式匹配

所以,我试着比较两者:

1)LIKE如果我们拥有%_可以使用;

所以,我跑:

SELECT 'true' 
  FROM dual 
 WHERE 'true' like '%ru_'; 
Run Code Online (Sandbox Code Playgroud)

我会按预期在输出中得到"真实";

2)在REGEXP案例中,如果我运行:

SELECT 'true' 
  FROM dual WHERE REGEXP_LIKE('true', '[[:alpha:]]');
Run Code Online (Sandbox Code Playgroud)

要么

SELECT 'true' 
  FROM dual WHERE REGEXP_LIKE('true', 'u');
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,我都会在结果集中得到"真实".我希望regexp_like根据regexp匹配整个字符串,而不是只匹配给定示例中的一个字符;

我也希望以此为例

SELECT 'true' 
  FROM dual WHERE REGEXP_LIKE('true', '[[:alpha:]]');
Run Code Online (Sandbox Code Playgroud)

成为

SELECT 'true' 
  FROM dual 
 WHERE REGEXP_LIKE('true', '[[:alpha:]]+'); 
Run Code Online (Sandbox Code Playgroud)

这意味着[[:alpha:]]可以多次应用令牌,这将与reg exp匹配.如果没有+*,[[:alpha:]]令牌只匹配一个只有"t"的字符,并且由于只需要一个匹配,它将不再匹配失败匹配的任何字符.

对我来说这是一种奇怪的行为.如果我错了,请纠正我.谢谢.

编辑:附加说明:

为什么我首先开始研究它的问题是确保名字不包含任何数字,但只是字母和练习考试会给出以下答案:
A.

ALTER TABLE CUSTOMERS ADD CONSTRAINT cust_f_name CHECK(REGEXP_LIKE(cust_first_name, '^A-Z'))NOVALIDATE; …
Run Code Online (Sandbox Code Playgroud)

regex oracle

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