【问题标题】:how to call a stored procedure using table data?如何使用表数据调用存储过程?
【发布时间】:2014-01-02 23:04:20
【问题描述】:

我想使用以下要求创建一个存储过程。

我尝试并编写了一个存储过程,它可以很好地处理静态值。

存储过程如何处理动态值。

请在这里找到我的要求。

 Create a stored proc “skillsparse” that accepts a string of text and and breaks it up into 1,2,3 word phrases. 

    a.       For example: I love java because it’s fun should have these 15 phrases

    i.      I
   ii.      I love
   iii.      I love java
   iv.      Love
   v.      Love java
   vi.      Love java because
   vii.      Java
   viii.      Java because
   ix.      Java because it’s
   x.      Because
   xi.      Because it’s
   xii.      Because it’s fun
   xiii.      It’s
   xiv.      It’s fun
   xv.      fun

    3.       Store these phrases in a new table called: github_skills_phrases with fields:  ID, userid, skills_id (from github_skills_source) and skills_phrase

    4.       Create a storedproc that compares the skills_phrases against the skills table (ref Table) and store the values into the github_skills table for each user. If possible, please maintain the source of where the skills came from (repodesc, repolang, starred, bio)

    5.       NOTE: Aside from the info in the new table Kishore is creating, you will also need to run the github_users.bio field against the Skillsparse procedure.  You can start this first (for testing logic, etc) since the github_users.bio already exists and has data.



    We don’t need to go this for users who have not yet been processed for skills

我是这样写的:

++++++++++++++++++++++++++++++++++++++++++++++++++++++
DELIMITER $$
CREATE procedure testing(IN id varchar(20),IN usr_id varchar(20),IN str varchar(200))
begin
DECLARE wordCnt varchar(20);
DECLARE wordCnt1 varchar(20);
DECLARE idx INT DEFAULT 1;
DECLARE splt varchar(200);
declare strng varchar(200);


create temporary table tmp.hello1(id varchar(200),usr_id varchar(200),st varchar(200));
set strng = str;
set wordCnt = LENGTH(trim(strng)) - LENGTH(REPLACE(trim(strng), ' ', ''))+1;
set wordCnt1 = LENGTH(trim(strng)) - LENGTH(REPLACE(trim(strng), ' ', ''))+1;

 myloop: WHILE idx <= wordCnt DO
 set splt = substring_index(trim(strng),' ',idx);
 insert into tmp.hello1 values (id,usr_id,splt);

 set idx=idx+1;
 IF idx = 4 THEN
 set strng = substring(trim(strng),length(substring_index(trim(strng),' ',1))+1);
 set idx = 1;
 set wordCnt = wordCnt -1;
 END IF;
 end while ;

 insert into tmp.hello1 values (id,usr_id,trim(substring(trim(str),length(substring_index(trim(str),' ',wordCnt1-1))+1)));
 end $$

输出 ::

 mysql> call testing('10','200','I am the my fine the kks hhh nanj kell');
Query OK, 1 row affected (0.77 sec)

mysql> select * from hello1;
+------+--------+---------------+
| id   | usr_id | st            |
+------+--------+---------------+
| 10   | 200    | I             |
| 10   | 200    | I am          |
| 10   | 200    | I am the      |
| 10   | 200    | am            |
| 10   | 200    | am the        |
| 10   | 200    | am the my     |
| 10   | 200    | the           |
| 10   | 200    | the my        |
| 10   | 200    | the my fine   |

....... ………… | 10 | 200 |凯尔 | +--------+--------+----------------+ 一组 27 行(0.00 秒)

我的存储过程在静态值下运行良好。如何使用表数据动态调用存储过程。 请帮我写一个存储过程来调用表数据。

【问题讨论】:

    标签: mysql sql function stored-procedures


    【解决方案1】:

    如果你的意思是你需要在某些数据表的 select 语句中调用这个存储过程,这是不可用的。 你有两个选择: 1-将您的过程转移到函数中,然后您可以从 select 语句中轻松调用它。 2-编写plsql代码来调用这个过程,你可以检查下面的链接关于这一点 oracle call stored procedure inside select

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2012-12-25
      相关资源
      最近更新 更多