我在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数据库中有一个存储过程.
在这个存储过程中,我定义了一个游标.
我使用以下方法遍历结果集:
FOR item IN cursor_name LOOP
END LOOP;
Run Code Online (Sandbox Code Playgroud)
查询执行了多少次?有没有办法让我知道?这也是最好的方法,还是应该以不同的方式迭代?
谢谢.
我正在做大学作业,要求我创建一个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数据库中读取数据.问题是,在某些情况下,接收数据会在数字后面添加零,我不知道为什么会发生这种情况?!?
例如,我想读这样的数据
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()的方式只排除行索引的数字.
我有一个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的有效方法.
有什么好主意,请告诉我.
我有一个独特的场景,我需要将多个列值放入多个变量中.我面临的问题是,虽然存在一个列值,但其他列不需要存在,因此我最终得到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条件不断变化,因此我也不想打开那些多个游标.任何人都可以让我知道我怎么能做到这一点?
谢谢你的善意
我在包的规范中声明了记录类型和记录表,我需要使用这个表类型作为管道函数的返回.
如果我将INDEX BY(某些东西)添加到表声明中,导致管道函数中的错误编译.为什么不能使用INDEX BY?
我开始对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)