Oracle 怎么把存储过程传过来的参数拼接成一个字符串啊!

时间:2023-01-07 17:02:27
  create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
    str1:=''||d1hour00||''+'-'+''||d1hour03||''+'-'+''||d1hour00||'';
      dbms_output.put_line(str1);
end STRFHYC;


这么写老提示我字符串拼写不对!谁知道怎么弄啊!帮帮忙啊

18 个解决方案

#1


你那边的加号减号是干吗用的,oracle拼接字符时是用||来进行拼接

#2


 str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';

#3


同上
引用 1 楼 nvhaixx 的回复:
你那边的加号减号是干吗用的,oracle拼接字符时是用||来进行拼接

#4


啊!!是么!那能帮我拼接下么!
-号是连接2个变量用的!想让形成d1hour00-d1hour03-d1hour006这样的字符串
+号我以为和java一样要用他连接字符串呢

#5


晕啊
 dbms_output.put_line(str1);
怎么按大家的改了!
报错又提示他有错了啊

#6


那就是2楼的理解喽
引用 2 楼 rfb0204421 的回复:
str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';

str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
不过这前后加''是干什么用的?

#7


str1:=d1hour00||'-'||d1hour03||'-'||d1hour00;
 
 

#8


晕啊
create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:=str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
 
  dbms_output.put_line(str1);
end STRFHYC;

dbms_output.put_line(str1);
怎么按大家的改了!
报错又提示它有错了啊 
这是怎么回事啊

#9


不是str1:=str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
是str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
  

#10


晕啊
create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
  
  dbms_output.put_line(str1);
end STRFHYC;

额额复制多了!但是这样也不打印啊!报错dbms_output.put_line(str1);
有问题啊!

#11


错误信息是什么?
把你的执行语句也贴出来看看?

#12


 Compilation errors for PROCEDURE JLGR.STRFHYC

Error: PLS-00103: 出现符号 "DBMS_OUTPUT"在需要下列之一时:
        * & = - + ; < / >
          at in is mod remainder not rem <an exponent (**)>
          <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
          between || member SUBMULTISET_
       符号 "*" 被替换为 "DBMS_OUTPUT" 后继续。
Line: 8
Text: dbms_output.put_line(str1)



以上报错
测试 输入 1,2,3
最后应该形成1-2-3

#13


create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:= d1hour00||'-'||d1hour03||'-'||d1hour00;
  DBMS_OUTPUT.PUT_LINE(STR1);
end STRFHYC;

#14


d1hour00变量本来就是varchar2类型的前面就不用加单引号了啊。
set serveroutput on;
DECLARE
D1HOUR00 VARCHAR2(10) := '1';
D1HOUR03 VARCHAR2(10) := '2';
d1hour06 VARCHAR2(10) := '3';
str1 varchar(1000);
begin
  str1:= d1hour00||'-'||d1hour03||'-'||d1hour06;
  DBMS_OUTPUT.PUT_LINE(STR1);
end;

#15


引用 10 楼 overmindsl 的回复:
晕啊
create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
  
 ……

楼主,细心点儿嘛,最后一个明明是d1hour06 ,你写成d1hour00了,语句没有错误,结果不正确

#16


先执行这段,看有没有错误信息
CREATE OR REPLACE PROCEDURE strfhyc (
   d1hour00   IN   VARCHAR2,
   d1hour03   IN   VARCHAR2,
   d1hour06   IN   VARCHAR2
)
IS
   str1   VARCHAR (1000);
BEGIN
   str1 := d1hour00 || '-' || d1hour03 || '-' || d1hour00;
   DBMS_OUTPUT.put_line (str1);
END strfhyc;

再跑这句
set serverout on
call strfhyc ('1','2','3');/

#17


万分感谢大家呵呵!数据库不太会写!错误多多啊!终于好用了!

#18


分都给大家了哈!按热心度和给出答案给的分!第一次弄呵呵!多少大家别建议哈

#1


你那边的加号减号是干吗用的,oracle拼接字符时是用||来进行拼接

#2


 str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';

#3


同上
引用 1 楼 nvhaixx 的回复:
你那边的加号减号是干吗用的,oracle拼接字符时是用||来进行拼接

#4


啊!!是么!那能帮我拼接下么!
-号是连接2个变量用的!想让形成d1hour00-d1hour03-d1hour006这样的字符串
+号我以为和java一样要用他连接字符串呢

#5


晕啊
 dbms_output.put_line(str1);
怎么按大家的改了!
报错又提示他有错了啊

#6


那就是2楼的理解喽
引用 2 楼 rfb0204421 的回复:
str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';

str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
不过这前后加''是干什么用的?

#7


str1:=d1hour00||'-'||d1hour03||'-'||d1hour00;
 
 

#8


晕啊
create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:=str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
 
  dbms_output.put_line(str1);
end STRFHYC;

dbms_output.put_line(str1);
怎么按大家的改了!
报错又提示它有错了啊 
这是怎么回事啊

#9


不是str1:=str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
是str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
  

#10


晕啊
create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
  
  dbms_output.put_line(str1);
end STRFHYC;

额额复制多了!但是这样也不打印啊!报错dbms_output.put_line(str1);
有问题啊!

#11


错误信息是什么?
把你的执行语句也贴出来看看?

#12


 Compilation errors for PROCEDURE JLGR.STRFHYC

Error: PLS-00103: 出现符号 "DBMS_OUTPUT"在需要下列之一时:
        * & = - + ; < / >
          at in is mod remainder not rem <an exponent (**)>
          <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
          between || member SUBMULTISET_
       符号 "*" 被替换为 "DBMS_OUTPUT" 后继续。
Line: 8
Text: dbms_output.put_line(str1)



以上报错
测试 输入 1,2,3
最后应该形成1-2-3

#13


create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:= d1hour00||'-'||d1hour03||'-'||d1hour00;
  DBMS_OUTPUT.PUT_LINE(STR1);
end STRFHYC;

#14


d1hour00变量本来就是varchar2类型的前面就不用加单引号了啊。
set serveroutput on;
DECLARE
D1HOUR00 VARCHAR2(10) := '1';
D1HOUR03 VARCHAR2(10) := '2';
d1hour06 VARCHAR2(10) := '3';
str1 varchar(1000);
begin
  str1:= d1hour00||'-'||d1hour03||'-'||d1hour06;
  DBMS_OUTPUT.PUT_LINE(STR1);
end;

#15


引用 10 楼 overmindsl 的回复:
晕啊
create or replace procedure STRFHYC(d1hour00 IN VARCHAR2,d1hour03 IN VARCHAR2,d1hour06 IN VARCHAR2) is

str1 varchar(1000);
begin
  str1:=''||d1hour00||'-'||d1hour03||'-'||d1hour00||'';
  
 ……

楼主,细心点儿嘛,最后一个明明是d1hour06 ,你写成d1hour00了,语句没有错误,结果不正确

#16


先执行这段,看有没有错误信息
CREATE OR REPLACE PROCEDURE strfhyc (
   d1hour00   IN   VARCHAR2,
   d1hour03   IN   VARCHAR2,
   d1hour06   IN   VARCHAR2
)
IS
   str1   VARCHAR (1000);
BEGIN
   str1 := d1hour00 || '-' || d1hour03 || '-' || d1hour00;
   DBMS_OUTPUT.put_line (str1);
END strfhyc;

再跑这句
set serverout on
call strfhyc ('1','2','3');/

#17


万分感谢大家呵呵!数据库不太会写!错误多多啊!终于好用了!

#18


分都给大家了哈!按热心度和给出答案给的分!第一次弄呵呵!多少大家别建议哈