Пример реализации приложения Программа отправки и анализа SMS-сообщений (через e-mail с WEB-интерфейсом.

Презентация:



Advertisements
Похожие презентации
PL/SQL Пакеты. Определение Пакет – это объект схемы данных, объединяющий набор типов, объектов и подпрограмм PL/SQL.
Advertisements

PL/SQL Хранимые процедуры и функции. Процедуры [CREATE [OR REPLACE]] PROCEDURE procedure_name[(parameter[, parameter]...)] {IS | AS} [local declarations]
Основы реляционных баз данных Лекция 6. Введение в SQL Желенкова Ольга Петровна, с.н.с. ОИ САО РАН, к.ф.-м.н апреля 2008.
Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
CREATE TABLE Ident_table ( ID int IDENTITY(1, 1), some_values varchar(50)); IDENTITY [ ( seed, increment ) ]
Типы хранимых процедур System stored procedures User-defined stored procedures Temporary stored procedures.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
Введение в SQL (НЕ select) Затрагиваемые темы Роль языка SQL. Части SQL Роль языка SQL. Части SQL Администрирование БД: привилегии (DCL) Администрирование.
Создание Web страниц Урок 12: PHP & MySQL Павел Бочаров.
Work with databases in Java. JDBC Tutorial for students of universities Author: Dudnik Oxana.
Язык SQL Последовательности Представления Индексы.
Типы задач на коллоквиум 2 Реляционные и объектные модели для: – Хранения и работы с деревом произвольной глубины – Хранения и работа с графом – Работы.
Система контроля прав доступа При помощи процедур и триггеров в MySQL.
Процедуры Базы данных: учебный курс Некоторые операции, рассматриваемые как неделимые, трудно выразить с помощью одного запроса к БД. Примеры: занести.
Архитектура «Клиент-сервер». Обзор компонентов SQL Server 2000.
1 Особенности работы MySQL 5.0 и перспективы развития СУБД Михаил Серов (1234ru), инструктор авторизованного учебного центра MySQL в Москве Григорий Рубцов.
ОБЗОР PL/SQL. Общие понятия PL/SQL – это дополнение стандартного языка SQL многими средствами, присущими современным языкам программирования. PL/SQL обладает.
Выражения унарные (унарный минус) арифметические (+, -, *, /) сравнения (, =, =, , LIKE, BETWEEN...) конкатенации (||) логические (NOT, AND, OR)
Бланк запроса. Создание списка специальностей Вид при конструирования запросов.
PL/SQL Курсоры. Курсор – специальный элемент, связанный с SQL-оператором SELECT. Объявление курсора происходит в секции объявления базового блока. Работа.
Транксрипт:

Пример реализации приложения Программа отправки и анализа SMS-сообщений (через с WEB-интерфейсом.

Состав программного комплекса Скрипт для создания серверной части(SQL) Интерфейс пользователя (HTML) Скрипт для отправки сообщений с занесением в базу данных(ASP) Скрипт для анализа сообщений и отправки предупреждений(ASP)

Скрипт для создания серверной части(SQL) CREATE TABLE T_WORDS ( KEY varchar(50) NOT NULL ); INSERT INTO T_WORDS VALUES ('bomba'); INSERT INTO T_WORDS VALUES ('terror');

T_USERS CREATE TABLE T_USERS ( N_ID_USER int NOT NULL PRIMARY KEY, C_ varchar(50) NOT NULL, C_TELEFON varchar(50) NOT NULL, N_COUNT_ERR int, CONSTRAINT CK_ CHECK > 0 ) );

T_SMS CREATE TABLE T_SMS ( N_ID_SMS int NOT NULL PRIMARY KEY, N_ID_USER int NOT NULL FOREIGN KEY referehces T_USERS(N_ID_USER), D_DATE_SMS date NOT NULL DEFAULT (TODATE()), C_ORIG_TELEFON varchar(50) NOT NULL, C_DEST_TELEFON varchar(50) NOT NULL, C_MESSAGE varchar(160) );

Создание последовательностей CREATE SEQUENCE SEQ_USERS INCREMENT BY 1 START WITH 1 ; CREATE SEQUENCE SEQ_SMS INCREMENT BY 1 START WITH 1 ;

Создание представления CREATE OR REPLACE VIEW BAD_USERS ( , TELEFON, COUNT_SMS, COUNT_BAD ) AS SELECT C_ , C_TELEFON, COUNT(*), N_COUNT_ERR FROM T_USERS, T_SMS WHERE T_USERS.N_ID_USER = T_SMS.N_ID_USER AND N_COUNT_ERR > 0 GROUP BY C_ , C_TELEFON, N_COUNT_ERR HAVING COUNT(*) > 1;

Функция вставки нового user (или изменения параметров старого) CREATE OR REPLACE FUNCTION INS_USER ( varchar2,TELEFON varchar2, SMS varchar2) RETURN int IS count_bad int; # кол-во плохих слов n_usr int; # номер юзера BEGIN

Текст функции --Вычисляем наличие плохих слов в sms SELECT COUNT(*) into count_bad FROM T_WORDS WHERE INSTR(KEY,SMS)>0;

Ищем этого юзера в базе -- В n_usr будет кол-во юзеров с таким мылом SELECT count(*) into n_usr FROM T_USERS WHERE C_ = ;

Вставляем или обновляем информацию о юзере IF n_usr > 0 THEN UPDATE T_USERS SET N_COUNT_ERR = N_COUNT_ERR + count_bad WHERE C_ = ; -- Нет еще такого юзера в списке ELSE INSERT INTO T_USERS(N_ID_USER,C_ ,C_TELEFON,N_COUNT_ERR) VALUES (SEQ_USERS.nextval, , TELEFON, count_bad); END IF;

Возвращаем номер юзера SELECT N_ID_USER into n_usr FROM T_USERS WHERE C_ = ; RETURN n_usr; END;

Процедура вставки сообщения в базу CREATE OR REPLACE PROCEDURE NEW_SMS( varchar2, TELEFON1 varchar2, TELEFON2 varchar2, SMS varchar2) IS n_usr int; BEGIN n_usr := INS_USER( , telefon1, sms); INSERT INTO T_SMS(N_ID_SMS, N_ID_USER, C_ORIG_TELEFON,C_DEST_TELEFON, C_MESSAGE) VALUES (SEQ_SMS.nextval,n_usr,TELEFON1,TELEFON2, SMS); END;

Интерфейс пользователя Отправка SMS-сообщений через почту Введите ваш Введите ваш пароль для Введите ваш номер телефона: Введите номер телефона-получателя: Введите ваше сообщение:

Скрипт для отправки сообщений send sms

objCon = Server.CreateObject("ADODB.Connection"); objCon.Open("intranet", "iren", "iren40"); Server.ScriptTimeout = 1800; cSQL = "begin NEW_SMS('"+ +"', '"+tel1+"', '"+tel2+"', '"+sms+"'); end;"; Response.write(cSQL); objCon.Execute(cSQL);

Set SMS = Server.CreateObject("SMS_Gateway.clsSMS_Gateway") x = SMS.Send_SMS( , pass,tel1, tel2, sms) objCon.Close(); Set SMS = Nothing; %>

Скрипт выводит в окно браузера список «плохих» юзеров send sms

Получаем список objCon = Server.CreateObject("ADODB.Connection"); objCon.Open("intranet", "iren", "iren40"); Server.ScriptTimeout = 1800; cSQL = ""; cSQL = cSQL + " select , TELEFON, COUNT_SMS, COUNT_BAD "; cSQL = cSQL + " FROM BAD_USERS " ; cSQL = cSQL + " ORDER BY COUNT_BAD DESC " ; RecSet = Server.CreateObject("ADODB.RecordSet"); RecSet.Open(cSQL, objCon, 3);

Выводим список while (!RecSet.EOF) { Response.write('Пользователь:' + RecSet(" ") ); R esponse.write('['+RecSet("TELEFON")+']'); Response.write(' проколов: '+ RecSet("COUNT_BAD")); Response.write(' сообщений :'+ RecSet("COUNT_SMS")); RecSet.MoveNext(); } %>

Текст предупреждения Рассылка всем предупреждений Текст предупреждения: