Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

vidhyaprakash85's avatar

StoredProcedure execution as Job

I have stored procedure which is doing a task. When i try to execute in the controller it takes more time. So i planned to put as Job. When i try to execute nothing happens in the execution

Controller

 try {
            $emailAddress = auth()->user()->email ?? NULL;
            SubjectAllocationAllJob::dispatch($request->course, $request->regulation, $request->batch, $request->semester, $emailAddress);
            Alert::success('Exam Application Started Successfully. You will recieve email shortly');
            return redirect()->route('admin.exam.preprocess.subjectmapping.all');
        } catch (Exception $e) {
            Alert::error('Error Mapping Exam Application');
            return redirect()->back()->withInput();
        }

SubjectAllocationAllJob

<?php

namespace App\Jobs\ExamPreProcess;

use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use App\Mail\SubjectMappingAllSuccessMail;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Contracts\Queue\ShouldBeUnique;

class SubjectAllocationAllJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $regulation;
    public $course;
    public $batch;
    public $semester;
    public $email;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($regulation, $course, $batch, $semester, $email)
    {
        $this->regulation = $regulation;
        $this->course = $course;
        $this->batch = $batch;
        $this->semester = $semester;
        $this->email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        DB::select('CALL SubjectAllocation(?,?,?,?,?)', array($this->course, $this->regulation, $this->batch, $this->semester, session('ExamID')));
        if (!empty($this->email)) {
            Mail::to($this->email)->send(new SubjectMappingAllSuccessMail());
        }
    }
}

Job is running properly and i also i am getting an email. But in the mysql server nothing happens. If i try to run separately it is working fine.

procedure

DELIMITER $$
DROP PROCEDURE IF EXISTS SubjectAllocation $$
CREATE PROCEDURE `SubjectAllocation`(
	IN coursesin VARCHAR(25),
	IN regulationsin VARCHAR(25),
	IN batchin VARCHAR(25),
	IN semesterin VARCHAR(25),
	IN examyearin VARCHAR(2)
)
BEGIN
DROP
	TEMPORARY TABLE IF EXISTS `subjectassign`; CREATE TEMPORARY TABLE `subjectassign` (
		`subject_id` INT, `student_id` INT,
		`subjecttype_id` INT
	); INSERT INTO `subjectassign`
SELECT
	`subjects`.`id`,
	`students`.`id`,
	`subjects`.`subjecttype_id`
FROM
	`subjects`,
	`students`
WHERE
	`subjects`.`programme_id` = `students`.`programme_id`
	AND `subjects`.`regulation_id` = `students`.`regulation_id`
	AND `subjects`.`course_id` = `students`.`course_id`
	AND `subjects`.`subjectallocationtype_id` IS NULL
	AND `subjects`.`semester` = semesterin
	AND `students`.`regulation_id` = regulationsin
	AND `students`.`course_id` = coursesin
	AND `students`.`batch_id` = batchin; DELETE `subjectassign`
FROM
	`subjectassign`
	RIGHT JOIN `exam_applications` ON `subjectassign`.`student_id` = `exam_applications`.`student_id`
	AND `subjectassign`.`subject_id` = `exam_applications`.`subject_id`; INSERT INTO `exam_applications`(
		`student_id`, `subject_id`, `exammonth_id`,
		`examtype_id`, `exampapertype_id`,
		`verification`, `display`
	)
SELECT
	DISTINCT `student_id`,
	`subject_id`,
	examyearin,
	'1',
	'1',
	'N',
	'Y'
FROM
	`subjectassign`;
DROP
	TEMPORARY TABLE IF EXISTS `tmp_internalmark`; CREATE TEMPORARY TABLE `tmp_internalmark` (
		`subject_id` INT, `student_id` INT
	); INSERT INTO `tmp_internalmark`
SELECT
	`subjects`.`id`,
	`students`.`id`
FROM
	`subjects`,
	`students`
WHERE
	`subjects`.`programme_id` = `students`.`programme_id`
	AND `subjects`.`regulation_id` = `students`.`regulation_id`
	AND `subjects`.`course_id` = `students`.`course_id`
	AND `subjects`.`subjectallocationtype_id` IS NULL
	AND `subjects`.`semester` = semesterin
	AND `students`.`regulation_id` = regulationsin
	AND `students`.`course_id` = coursesin
	AND `students`.`batch_id` = batchin; DELETE `tmp_internalmark`
FROM
	`tmp_internalmark`
	RIGHT JOIN `internal_marks` ON `tmp_internalmark`.`student_id` = `internal_marks`.`student_id`
	AND `tmp_internalmark`.`subject_id` = `internal_marks`.`subject_id`; 
	INSERT INTO `internal_marks`(
		`student_id`, `subject_id`, `exammonth_id`,
		`batch_id`
	)
SELECT
	DISTINCT `student_id`,
	`subject_id`,
	examyearin,
	batchin
FROM
	`tmp_internalmark`; 
END $$
DELIMITER ;
0 likes
0 replies

Please or to participate in this conversation.