Что такое код sybase_select_db


Содержание

Что такое код sybase_select_db

(PHP 3, PHP 4, PHP 5)

sybase_select_db — выбирает базу данных Sybase.

Описание

bool sybase_select_db (string database_name, int link_identifier)

Возвращает TRUE при успехе, FALSE при ошибке.

sybase_select_db() устанавливает текущую активную БД на сервере, ассоциированную со специфицированным идентификатором ссылки.Если link_identifier не специфицирован, принимается последняя открытая ссылка. Если такой нет, функция пытается установить ссылку, как при вызове sybase_connect() , и использует её.

Что такое код sybase_select_db

Sybase SQL Anywhere — это новое название СУБД Watcom SQL фирмы Watcom. Такое название данная СУБД получила, начиная с версии 5.0. Переименование произошло после объединения компаний Sybase и Powersoft в 1995 году, в результате чего фирма Watcom, как составная часть компании Powersoft, вошла в состав корпорации Sybase Inc

Sybase SQL Anywhere представляет собой полнофункциональную СУБД на Intel-платформ для мобильных и небольших групп пользователей Данная СУБД позволяет разрабатывать приложения на основе технологии «клиент-сервер» на платформах Windows NT, Windows 95/98, Windows 3.x, OS/2, NetWare, Solaris/Sparc, HP-UX, AIX, DOS и QNX[ ]. Рассматриваемая СУБД предназначена для разработки приложений по технологии «клиент-сервер».

СУБД SYBASE SQL Anywhere является составным элементом системы SYBASE System 11 и ее последующей версии SYBASE System 11.5 Adaptive. Основным элементом этих систем является мощная СУБД SYBASE SQL. Server. Она позволяет хранить огромные объемы информации и обрабатывать запросы к базам данных с применением технологии клиент-сервер. СУБД SYBASE SQL. Server и SYBASE SQL Anywhere взаимно дополняют друг друга. Разработчики SYBASE SQL Anywhere старались достичь максимальной совместимости баз данных, создаваемых этой СУБД, с базами данных SYBASE SQL Server. Именно этим объясняется включение в SQL Anywhere некоторых элементов SYBASE SQL Server.

SYBASE SQL Anywhere может поставляться как в сетевом варианте СУБД, так и автономном варианте. В последнем случае все компоненты СУБД функционируют на том же компьютере, что и приложение. Для приложений не имеет значение какой вариант СУБД они используют. В рамках локальных сетей взаимодействие с приложениями-клиентами осуществляется посредством таких сетевых протоколов как NetBIOS, TCP/IP и IPX. Базы данных, созданные средствами SQL Anywhere, совместимы с последующими версиями и переносимы между платформами, на которых может функционировать данная СУБД.

SYBASE SQL Anywhere имеет встроенный интерфейс с рядом программных систем, например таких как Powersoft PowerBuilder, Optima С++ и Power Designer. Взаимодействие с другими системами и приложениями осуществляется при помощи следующих программных интерфейсов:

  • Спецификация ODBC. Данная спецификация предоставляет пользователям унифицированный интерфейс между приложениями и реляционными базами данных, в том числе и базами данных SQL. Этот интерфейс представляет собой совокупность функций. Эти функции организуют взаимодействие приложений с базами данных в операционных системах Windows 3.x, Windows 95/98, OS/2 и Windows NT. Спецификация ODBC представляет собой интерфейс нижнего уровня.
  • Встроенный SQL (Embedded SQL interface) позволяет «встраивать» SQL-операторы прямо в тексты программ-приложений на языках C или C++. Впоследствии такие приложения подвергаются обработке специальным препроцессором, который заменяет SQL-операторы на вызовы соответствующих функций и процедур. После этого преобразованные тексты приложений представляют собой тексты программ на языке программирования C или C++.
  • DDE-интерфейс. Это технология динамического связывания объектов используемая в операционной системе Windows 3.x.. С ее помощью осуществляется взаимодействие приложений-клиентов, которым требуются данные, с приложениями-серверами эти данные предоставляющие. Для применения этой технологии требуется использование соответствующих программных средств, поддерживающих функционирование DDE-клиента. С другой стороны в качестве серверов необходимо использовать приложения, обеспечивающие режим DDE-сервера. К числу последних относятся такие программные приложения, как Microsoft Access, Microsoft Excel и ряд других. В СУБД SYBASE SQL Anywhere роль DDE-сервера выполняет WSQL (Watcom SQL) DDE Server.
  • Высокоуровневый собственный интерфейс WSQL HLI (Watcom SQL High-level interface) обеспечивает на «высоком» уровне взаимодействие между SQL Anywhere и приложениями в средах операционных систем Windows 3.x, Windows 95/98, OS/2 и Windows NT. Данный интерфейс реализован для систем программирования аналогичных Visual Basic (для Windows 95/98 и Windows NT) и REXX (для OS/2).

СУБД SYBASE SQL Anywhere имеет в своем составе сетевой и автономный варианты СУБД.. Эти варианты реализованы в виде компонентам SQL Anywhere server/client и SQL Anywhere engine. SQL Anywhere server/client представляет сетевой вариант СУБД. Он организует взаимодействием приложений с базами данных в рамках локальной вычислительной сети по технологии «клиент-сервер».

Кроме локальной сети, СУБД SYBASE SQL Anywhere предоставляет вам возможность использовать технологию «клиент-сервер» и в рамках сети Internet. Для этого необходимо, чтобы на компьютере с сервером базы данных был организован Web-сервер и в состав его программного обеспечения входило приложение SYBASE Netlmpact Dynamo.

Сетевой вариант включает в себя удаленный сервер и клиентскую компоненту; SQL Anywhere server и SQL Anywhere client, соответственно. Функционирование СУБД в рамках сети заключается в следующем. На одной ЭВМ, играющей роль сервера базы данных, запускается удаленный сервер — SQL Anywhere server. Его задача состоит в ожидании запросов от клиентских ЭВМ, их обработке и отправлении результатов клиентов. Во время работы сервера на клиентских ЭВМ функционирует компонента SQL Anywhere client. Она принимает от клиентских приложений запросы.. Эти запросы представляют собой операторы языка SQL, например, SELECT (выбрать данные), UPDATE (модифицировать данные), CALL (вызвать хранимую процедуру) и другие. Полученные запросы компонента SQL Anywhere client отправляет по сети серверу базы данных и ожидает возвращение от него результатов этих запросов.

Компонента SQL Anywhere engine является автономным вариантом рассматриваемой СУБД и представляет собой локальный сервер баз данных. Он реализует технологию «клиент-сервер» в условиях, когда сервер и клиенты функционирует на одной ЭВМ. База данных хранится на этой же ЭВМ. Сервер принимает запросы непосредственно от приложений, обрабатывает их и отправляет приложениям результаты запросов. Наличие такого варианта позволяет проводить автономную отладку приложений. Это имеет большое значение, так как на этапе автономной отладке приложения находятся еще в «сыром» состоянии. Данное обстоятельство может сыграть плохую службы при их отладке в сетевом варианте СУБД, когда используемая база данных является общим ресурсом большого количества пользователей.

Клиентские приложения не различают с каким вариантом СУБД они работают. Одни и те же запросы выполняются для пользователя совершенно одинаково по одним и тем же правилам.

С точки зрения пользователя функции удаленного (SQL Anywhere engine) и локального (SQL Anywhere server) серверов идентичны. В связи с этим в дальнейшем в рамках данного разделом под термином «сервер» будем понимать компоненту SQL Anywhere server или SQL Anywhere engine, если не требуется подчеркнуть их различие.

Схема взаимодействия приложений с базой данных в СУБД SYBASE SQL Anywhere приведена на рис. 1.

Рис. 1. Взаимодействие приложений-клиентов с базой данных в различных вариантах СУБД SYBASE SQL Anywhere:
а) Автономный вариант;
б) Сетевой вариант.

Компоненты SQL Anywhere server/client и SQL Anywhere engine составляют основу СУБД. Однако наряду с ними в состав СУБД входит и ряд других компонентов. Все вместе эти компоненты составляют комплект поставки SQL Anywhere, в который входят:

  • SQL Anywhere server/client — сетевой вариант СУБД..
  • SQL Anywhere engine — автономный вариант СУБД;
  • SQL Remote — компонента поддержания режима репликаций;
  • Sybase SQL Central — утилита администрирования баз данных;
  • ISQL (Interactive SQL) — утилита интерактивного взаимодействия с базами данных;
  • набор дополнительных утилит для создания баз данных, их сжатия, уничтожения и т.д.

Приведенные компоненты являются элементами стандартной поставки. Кроме стандартной, рассматриваемая СУБД может предлагаться в виде профессиональной поставки. Она имеет еще большее число составляющих. Компоненты стандартной поставки будут рассмотрены далее.

Базы данных, создаваемые СУБД SYBASE SQL Anywhere, представляют собой реляционные базы данных. Эти базы данных состоят из совокупности объектов. Такими объектами являются:

  • Таблицы данных — хранят данные, составляющие основное содержание базы данных.
  • Ключи — совокупности атрибутов, образующих ключи (первичные и внешние), предназначенные для осуществления ускоренного поиска данных и обеспечения ограничений ссылочной целостности.
  • Индексы — специальные таблицы, предназначенные для быстрого поиска требуемой информации в таблицах данных.
  • Представления (Views) — связанные совокупности подмножеств таблиц данных, предоставляемых пользователям для ограничения их доступа к таблицам данных. При этом, к одним таблицам доступ запрещается совсем, а в других таблицах доступ разрешается только к некоторым записям этих таблиц.
  • Хранимые процедуры и функции— хранимые в базе данных подпрограммы на языке SQL, воспользоваться которые может любой пользователь, имеющий на это право.

В СУБД SYBASE SQL Anywhere используется диалект языка SQL — Watcom SQL. Он соответствует стандартам ANSI SQL/89 Level 2 и IBM SAA. Кроме того, используемый диалект SQL поддерживает новые возможности и расширения стандартов ANSI SQL/92 и IBMs DB2

  • Триггеры — подпрограммы, активизирующиеся при наступлении определенных событий, например, удаление записи из таблицы, модификация записей и т.д. Триггеры являются мощным средством обеспечения целостности данных.
  • Пользовательские типы данных — типы данных, создаваемые пользователем на основании базовых типов данных СУБД.
  • Системные таблицы — хранят всю информацию о схеме базы данных и содержащихся в ней объектах.
  • Вся информация базы данных может размещается в нескольких областях. Область представляет собой файл с расширением db, в которой хранится вся база данных или один из ее фрагментов. Каждая область характеризуется своим именем и файлом, соответствующим этой области. Первоначально база данных занимает только одну область с именем SYSTEM, которой соответствует базовый файл (root file). Затем по мере необходимости пространство внешней памяти базы данный может расширяться за счет добавления новых областей. Эти файлы областей могут быть размещены в любом каталоге на любом диске и любом узле локальной сети.

    Физически каждый файл (область) состоит из страниц фиксированного объема. Размер страниц устанавливается при создании базы данных. В страницах размещаются объекты базы данных. В зависимости от размера объектов каждая страница может содержать несколько экземпляров объектов или фрагмент одного из объектов.

    Наряду с файлами областями в состав базы данных входит файл для хранения журнала изменений БД — файл с расширением log. Наличие журнала изменений является основой манипулирование данными в рассматриваемой СУБД с использованием механизма транзакций. Такой подход обеспечивает высокую защиту баз данных от возникающих программных и аппаратных сбоев и отказов.

    Илон Маск рекомендует:  Кто такой фрилансер Хорошо ли быть фрилансером

    Sybase 12.5.4

    Есть субд — Sybase 12.5.4

    Есть некая процедурка, скажем procedure.
    Данная процедура

    exec procedure (exec procedure)

    возаращает селект, скажем такого вида:

    num (int),
    name (varchar),
    sex (int)

    Вопрос: как можно в данной субд
    — заменить некоторые данные, возвращаемые процедурой
    — добавить свои данные.

    Например (нерабочие примеры):

    execute procedure insert into #table
    (кидаем результат процедуры во временную таблицу и там уже подменяем)

    exex procedure
    union all
    select 1, a, 0

    Код самой процедуры менять нельзя

    Добавлено через 46 минут
    Как получить в процедуре набор данных, формируемый в другой процедуре.
    Иногда бывает так, что есть процедура, которая формирует и возвращает клиенту какой-то набор данных (result set), и хочется, повторно используя код этой процедуры, получить этот набор данных в другую процедуру и там возможно как-то еще его обработать.
    В ближайщем родственнике ASE, в MSSQLServer (кажется начиная с версии 6.0) существует вариант команды INSERT для вставки в таблицу набора данных, возвращаемого хранимой процедурой :

    insert into exec[ute]

    Sybase ASE не имеет такого варианта комманды INSERT ни со статическим вариантов EXEC, ни с динамическим.

    Хотелось бы заметить, что в большинстве случаев возможно использование только одного набора данных из хранимой процедуры и чаще всего структура этого набора данных строго фиксирована.

    Для реализации этой возможности в ASE надо рассмотреть альтернативные варианты решения задачи.
    замечание от MasterZiv Я лично хочу заметить, что по моему убеждению, сложившемуся за годы работы с SQL, SQL — это язык немодульный, в том смысле, что в нем практически нет возможностей повторного использования кода и попытки повторного испоьлзования кода часто бывают даже вредны (например для производительности). Так что первый вариант решения
    — просто скопировать текст запроса или использовать такие средства «размножения кода», как макропроцессоры.
    — Рассмотреть возможность использования VIEW. Это подходит только в случаях достаточно несложных запросов — JOIN-ов может быть сколько угодно, главное чтобы не было сложных операций типа множественных вложенных подзапросов или реляционного вычитания.
    — Рассмотреть возможность использовать временную, псевдовременную или постоянную таблицу для промежуточного хранения данных. Кстати, в этом варианте процедура может формировать несколько наборов данных в разных таблицах. При этом код исходной процедуры помещается в ещё одну процедуру процедуру-реализацию, которая складывает данные в выходную таблицу, а остальные процедуры либо выдают эти данные клиенту, либо используют их как-то еще.
    — Использовать CIS proxy table. Это возможность CIS (component integration service) позволяет представлять внешние по отношению к ASE источники данных в виде псевдо-таблиц в TSQL. Proxy-таблицы могут создаваться на таблицы, представления (views) и хранимые процедуры. Источниками данных могут быть любые СУБД, для которых есть т.н. коннекты (доп. модули) и все СУБД от Sybase, работающие по технологии OpenClient. Возможность работы с другими серверами Sybase (ASE,ASA и ASIQ) входит в базовую поставку ASE. Также есть возможность создать т.н. loopback-сервер — соединение CIS, обращающееся к самому себе, к тому же серверу, с которого идет обращение. И наконец, работая через loopback-сервер, можно сделать proxy-таблицу на любую процедуру и использовать эту proxy-таблицу в другой процедуре. Последовательности действий вкратце следующие :
    — сконфигурировать CIS
    — создать loopback-сервер
    — создать proxy-таблицу на процедуру. При этом прочитайте в документации особенности работы таких таблиц — в них первичный ключ соответствует параметрам процедуры, а атрибуты — набору данных, возвращаемому процедурой.

    Что такое код sybase_select_db

    sybase_affected_rows — возвращает число строк, измененных последним запросом

    Описание int sybase_affected_rows(int [link_identifier] );

    В озвращает: Число строк,измененных последним запросом.

    Ф ункция sybase_affected_rows() возвращает число строк, участвовавших в запросе вида INSERT, UPDATE или DELETE к серверу, указанному с помощью идентификтора соединения (link_identifier). Если идентификатор не задан, используется соединение, открытое последним.

    Э та команда работает только с операторами, изменяющими записи. Для получения числа записей, возвращаемых оператором SELECT следует использовать функцию sybase_num_rows().

    sybase_close — завершает соединение с Sybase

    Описание int sybase_close(int link_identifier);

    В озвращет: true — в случае успеха, false — в случае ошибки

    Ф ункция sybase_close() завершает соединение с базой данных Sybase, обозначенное с помощью идентификатора соединения. Если он не указан, используется соединение, открытое последним.

    О тметим, что вызов этой функции не является обязательным, т.к. временные соединения закрываются автоматически после окончания выполнения скрипта.

    Ф ункция sybase_close() не завершает постоянные соединения, открытые с помощью sybase_pconnect().

    sybase_connect — устанавливает соединение с Sybase — сервером

    Описание int sybase_connect(string servername, string username, string password);

    В озвращает: В случае успеха: идентификатор соединения (положительное число), в противном случае — false.

    Ф ункция sybase_connect() устанавливает соединение с Sybase-сервером. Параметр «servername» должен содержать существующее имя сервера, определенное в файле «interfaces».

    Е сли функция sybase_connect() будет вызвана повторно с теми же параметрами, то новое соединение не установится, а будет возвращен идентификатор уже открытого соединения.

    С оединение с сервером будет закрыто после завершения скрипта или раньше, посредством явного вызова функции sybase_close().

    sybase_data_seek — перемещает внутренний указатель записей

    Описание int sybase_data_seek(int result_identifier, int row_number);

    В озвращает: true -в случае успеха, иначе — false

    Ф ункция sybase_data_seek() перемещает внутренний указатель в результирующем наборе записей, заданном с помощью идентификатора result_identifier, на строку с номером row_number. При последующем вызове функции sybase_fetch_row() будет извлечена эта строка.

    sybase_fetch_array — извлекает строку в виде массива

    Описание int sybase_fetch_array(int result);

    В озвращает: Массив, содержащий извлеченную из набора данных строку или false — если строк больше нет.

    Ф ункция sybase_fetch_array() является расширенной версией функции sybase_fetch_row(). Доступ к элементам массива возможен не только по номерам , но и по именам столбцов таблицы.

    Н еобходимо отметить, что функция sybase_fetch_array() работат НЕ намного МЕДЛЕННЕЕ, чем sybase_fetch_row(), и предоставляет дополнительные возможности по сравнению с последней.

    sybase_fetch_field —получает информацию о столбце из набора данных

    Описание object sybase_fetch_field(int result, int field_offset);

    В озвращает объект, содержащий информацию о столбце

    Ф ункцию sybase_fetch_field() можно использовать для получения данных о столбцах результирующего набора result. Если смещение (номер) столбца в таблице (field_offset) не указано, то при каждом вызове sybase_fetch_field() будет извлекаться информация о следующем по порядку столбце.

    name — имя столбца. Если столбец является вычслимым, то это свойство принимает значение computed#N, где #N — это порядковый номер;

    column_source — таблица, которой принадлежит данный столбец;

    max_length — максимальная длина столбца;

    numeric — 1, если столбец — числовой;

    sybase_fetch_object —извлекает строку в виде объекта

    Описание int sybase_fetch_object(int result);

    В озвращает: Объект, свойства которого соответствуют извлеченной из набора данных строке, или false — если сторк больше нет.

    Ф ункция sybase_fetch_object() аналогична sybase_fetch_array() за одним исключением — она возвращает объект, а не массив. Фактически это означает, что доступ к данным осществляется по именам столбцов, а не по их смещению в строке (числовые значения не могут быть именами свойств).

    С точки зрения скорости выполнения эта функция идентична sybase_fetch_array(), и работает практически также быстро, как и sybase_fetch_row() (разница в скорости незначительна).

    sybase_fetch_row — получает строку в виде пронумерованного массива

    Описание array sybase_fetch_row(int result);

    В озвращает: Массив, соответствующий извлеченной строку, или false — если строк больше нет.

    Ф ункция sybase_fetch_row() извлекает строку данных из результирующего набора, заданного идентификатором result .Строка возвращается в виде массива. Каждый столбец хранится в виде элемента массива. Нумерация элементов начинается с 0.

    П оследующий вызов функции sybase_fetch_rows() вернет следующую строку запроса, или false, если строк больше нет.

    sybase_field_seek — указывает смещение (номер) столбца в строке

    Описание int sybase_field_seek(int result, int field_offset);

    П ереходит к указанному столбцу. Если при следующем вызове sybase_fetch_field() не будет указан конкретный номер столбца, то будет возвращен этот столбец.

    sybase_free_result —освобождает память, занятую результирующим набором данных

    Описание int sybase_free_result(int result);

    Ф ункцию sybase_free_result() следует вызывать, только если вы хотите уменьшить объем используемой памяти во время выполнения скрипта. Все занимаемая память будет автоматически освобождена после завершения скрипта. Вы можете вызвать sybase_free_result() с идентификатором result в качестве параметра, и содержащая результаты выполнения этого запроса память будет освобождена.

    sybase_num_fields — получает число столбцов в результирующем наборе данных

    Описание int sybase_num_fields(int result);

    sybase_num_fields() возвращает число столбцов в результирующем наборе

    sybase_num_rows — получает число столбцов в результирующем наборе данных

    Описание int sybase_num_rows(string result);

    sybase_num_rows() rвозвращает число строк в результирующем наборе

    sybase_pconnect — открывает постоянное соединение с Sybase-сервером

    Описание int sybase_pconnect(string servername, string username, string password);

    В озвращает: Идентификатор соединения с Sybase-сервером (положительное число) или false в случае ошибки

    Ф ункция sybase_pconnect() выполняется практически аналогично sybase_connect() с двумя главными отличиями:

    В о-первых, при установлении соединения функция сначала пытается найти уже открытое (постоянное) соединение, использующее те же имена хоста, пользователя и пароль. Если такое соединение уже существует, то возвращается его идентификатор, и новое соединение не устанавливается.

    В о-вторых, соединение с SQL-сервером не завершается после выполнения скрипта. Вместо этого, оно остается открытым для последующего использования. (Функция sybase_close () не закрывает соединения, установленные с помощью sybase_pconnect()).

    П оэтому этот тип соединений называется «постоянным».

    sybase_query — посылает запрос на Sybase-сервер

    Описание int sybase_query(string query, int link_identifier);

    В озвращает: в случае успеха- идентификатор результирующего набора данных (положительное число), или false- в случае ошибки.

    Ф ункция sybase_query() посылает запрос к текущей открытой базе данных на сервере, заданном иденитификатором link_identifier. Если этот идентификатор не указан, то используется соединение, открытое последним. Если нет ни одного соединения, то функция пытается установить новое ( как если бы была вызвана sybase_connect()), и затем его использовать.

    sybase_result —получает результирующие данные

    Описание int sybase_result(int result, int i, mixed field);

    В озвращает: Содержимое ячейки данных на пересечении указанных строки и столбца из заданного результирующего набора данных Sybase.

    Ф ункция sybase_result() возвращает содержимое одной ячейки данных из результирующего набора Sybase. В качестве параметра field может быть указано смещение (номер) столбца, его имя или имя столбца и имя таблицы, указанные через точку. (имя_столбца.имя_таблицы). Если для столбца был указан псевдоним («select foo as bar from. «), то вместо имени столбца следует использовать этот псевдоним.

    П ри работе с большими наборами данных следует использовать функции (перечисленные ниже), которые извлекают из таблицы всю строку целиком. Поскольку эти функции за один вызов возвращают несколько ячеек данных, они работают ГОРАЗДО быстрее, чем sybase_result(). Кроме того, надо отметить, что скорость выполнения будет гораздо выше, если указывать числовое смещение столбца, а не параметр вида имя_столбца.имя_таблицы.

    sybase_select_db — выбирает базу данных Sybase

    Описание int sybase_select_db(string database_name, int link_identifier);

    В озвращает: true — в случае успеха, false — в случае ошибки

    Ф ункция sybase_select_db() устаналивает активную базу данных на сервере, заданном идентификатором link_identifier. Если это идентификатор не указан, то используется соединение, открытое последним. Если нет открытых соединений, то функция попытается установить новое (как если бы была вызвана sybase_connect()) и затем его использовать.

    В се последующие вызовы sybase_query() будут работать с данной активной базой данных.

    Из базы данных Sybase, как я могу получить описание таблицы (имена и типы полей)?

    У меня есть доступ к командной строке isql, и мне нравится получать метаданные всех таблиц данной базы данных, возможно, в форматированном файле. Как я могу этого достичь?

    Илон Маск рекомендует:  Запуск программы

    11 ответов

    здесь — это диаграмма системных таблиц Sybase.

    Список всех пользовательских таблиц:

    вы можете изменить «U» на другие объекты:

    • C-вычисляемый столбец
    • D-по умолчанию
    • функция F-SQLJ
    • L-log
    • N-условие раздела
    • P-Transact-SQL или SQLJ процедура
    • PR-подготовить объекты (созданные динамическим SQL)
    • R-rule
    • РИ – ограничение ссылочной
    • s – система стол
    • TR-trigger
    • таблица U-user
    • V-view
    • XP, – расширенная хранимая процедура

    список столбцов в таблице:

    sp_help это то, что вы ищете.

    из документации Sybase online на процедура sp_help системы процедуры:

    сообщает информацию об объекте базы данных (любом объекте, перечисленном в sysobjects) и о системных или пользовательских типах данных, а также вычисляемых Столбцах и функциональных индексах. Столбец отображает optimistic_index_lock.

    синтаксис

    вот (частичный) вывод для таблицы издателей (вставлен из использование sp_help для объектов базы данных):

    Если вы выполняете sp_help без указания имени объекта, результирующий отчет показывает каждый объект в sysobjects вместе с его именем, владельцем, и тип объекта. Также показан каждый определяемый пользователем тип данных в systypes и его имя, тип хранения, длина, разрешены ли значения null, и любые значения по умолчанию или правила, связанные с ним. В отчете также отмечается, были ли определены столбцы первичного или внешнего ключа для таблицы или представления.

    Структура метаданных в СУБД от Microsoft и Sybase

    Не так давно мы анонсировали бесплатную утилиту SQL Dynamite для поиска по метаинформации в базах данных. Хотим поблагодарить всех за хорошие отызвы, критику, найденные ошибки.
    Для вас мы выпустили обновление, исправили найденные ошибки, и добавили поддержку SQLite и Informix.

    Новая версия доступна здесь.

    В прошлой статье мы обещали рассмотреть вопросы доступа к метаинформации БД. Сегодня поговорим про MS SQL и Sybase.

    Процесс поиска и анализа связей различных объектов в СУБД Microsoft SQL Server, Sybase Adaptive Server Enterprise, Sybase Anywhere и SQL Azure прежде всего заключается в работе с метаданными.

    Проблема в том что Sybase ASE и MSSQL, изначально имея одинаковую структуру метаданных, прошли долгий путь развития независимо друг от друга. Sybase Anywhere изначально была Watcom SQL и имела кучу отличий от Sybase ASE, а SQL Azure – это вообще облачная СУБД. Тем не менее, структура метаданных в них во многом схожа, в частности имеют одинаковые названия таблицы, содержащие ключевую информацию об объектах (sysobjects, syscomments и syscolumns).

    В данной статье рассматривается структура метаданных СУБД следующих версий:

    MSSQL 2005, Sybase ASE 15.7, Sybase Anywhere 12.0.1 и SQL Azure текущей на данный момент версии.

    0) Общие для всех БД таблицы и хранимые процедуры

    Используется для хранения информации обо всех объектах в системе (ID, имя объекта, тип объекта и прочие параметры).
    Основная таблица для работы с метаданными.

    Хранит в себе текст хранимых процедур, пользовательских функций, триггеров и просмотров (views).

    Хранит в себе информацию о колонках каждой таблицы (имя, тип и пр.).

    Хранимая процедура выдающая информацию о колонках таблицы по её имени.

    1) Таблицы и хранимые процедуры, специфические для нескольких СУБД:

    (MSSQL & Sybase ASE) Хранит в себе информацию о первичных ключах, внешних ключах и подобных им объектах (unique keys, checks, defaults).

    2. sys.sysindexes (view) или sysindexes (table)

    (MSSQL & Sybase ASE & Sybase Anywhere) Хранит в себе информацию об индексах.

    (MSSQL & Sybase Anywhere) Хранит в себе информацию о внешних ключах.

    (MSSQL & SQL Azure & Sybase ASE) Хранимая процедура выдающая информацию об индексах таблицы по её имени.


    (MSSQL & Sybase ASE) Хранимая процедура выдающая информацию о внешних и первичных ключах таблицы по её имени.

    Таблицы и хранимые процедуры, специфические для СУБД от Microsoft:

    Это специфическая для MSSQL (как видно из названия) хранимая процедура которая выдаёт подробную информацию о колонках таблицы по её имени.

    Это специфическая для MSSQL (как видно из названия) хранимая процедура которая выдаёт подробную информацию о первичных и внешних ключах таблицы по её имени.

    Это специфическая для MSSQL (как видно из названия) хранимая процедура которая выдаёт подробную информацию об ограничениях таблицы по её имени.

    3) MSSQL + SQL Azure

    SQL Azure, так же как и Microsoft SQL Server (начиная с версии 2005) поддерживает INFORMATION_SCHEMA (кроме этих двух СУБД этот стандарт также поддерживается MySQL и PostgreSQL).

    Хранит в себе информацию об индексах и первичных ключах.

    2. sys.sql_modules (только для SQL Azure)

    Хранит в себе информацию о триггерах.

    Как и предыдущая таблица, хранит в себе информацию о триггерах.

    Хранит в себе информацию о внешних ключах.

    Кроме того MSSQL (начиная с версии 2005) поддерживает такую штуку как INFORMATION SCHEMA. Если вкратце – это стандарт хранения метаданных, заключающийся в том что СУБД должна иметь специальный набор read-only views которые выдают информацию по разных типам объектов. Примеры:

    (MSSQL & SQL Azure) Хранит в себе информацию о views.

    (MSSQL & SQL Azure) Хранит в себе информацию о хранимых процедурах и функциях.

    Как мы видим, несмотря на существенные различия в структуре метаданных, для анализа содержимого этих СУБД вполне могут быть применены (с определёнными ограничениями естественно) схожие подходы. Основная логика работы с ними (поиск вхождений, генерация DDL по метаданным) уже реализована в программе SQL Dynamite.

    Как конвертировать базу Sybase в MSSQL?

    Коллеги, помогите пожалуйста решить такую задачу.

    файл базы данных Cegedim (файл с расширением .db).

    хочется получить эту базу в MS SQL

    Используя google и перебор версий, опытным путем удалось понять что база от Sybase 7 Anywhere.

    Т.к. 7мая версия весьма старая и сильно плевалась на win7 x64, с развернул ее на виртуалке с Windows XP x86

    Совершенно не зная что делать и с какой стороны подступиться, я пошел в ODBC и настроил нечто следующее:

    Далее google подсказал что можно конвертировать базу с помощью программы Full Converter Enterprise (у меня версия 5.19)

    Она успешно конвертирует базу Sampe, которая появилась при установке Sybase 7 Anywhere.

    Но вот с моей базой не получается справиться.

    Первую проблему удалось решить достаточно просто

    C:\Program Files\Sybase\SQL Anywhere 7\win32>dbeng7.exe -c 500m C:\share\db1.db

    Сейчас проблема с авторизацией

    Насколько я понял, включить Integrated logins можно изменив LOGIN_MODE на Mixed или Integrated. Сделать это можно с помощью команды SET OPTION Public.LOGIN_MODE = Mixed

    Но подключиться через оснастку Interactive SQL также не удается.

    Логин\пароль к базе мне неизвестен. Выложить в открытый доступ базу нет возможности.

    forum.clarionlife.net

    Место общения программистов, форум разработчиков БД на Clarion

    • Темы без ответов
    • Активные темы
    • Поиск

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Модератор: Andrew™

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение Developer » 21 Март 2020, 1:00

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Необходимо получить информацию из таблицы другой базы данных этого же текущего сервера SAP Sybase ASA без реконнекта к другой базе сервера.

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение BOB » 21 Март 2020, 8:12

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение Developer » 21 Март 2020, 9:33

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение BOB » 21 Март 2020, 9:39

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение Developer » 21 Март 2020, 9:49

    Это всё теоретические рассуждения

    file = ‘select * frpom baza.dbo.file — данную конструкцию не использую

    Мне небходим практически проверенный скрипт именно на Sybase SQL Anywhere dbisql.exe когда подключен к одной базе а выборку необходимо сделать из другой без реконнекта

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение BOB » 21 Март 2020, 10:39

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение kreator » 21 Март 2020, 10:56

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение Developer » 21 Март 2020, 17:39

    BOB спасибо за отклик и ответы, но:

    1)Конструкцию file = ‘select * from любая база.dbo.file в контексте данного вопроса не использую

    2)Нужен именно проверенный реальный рабочий SQL скрипт для SAP Sybase DQL Anywhere
    Interactive SQL dbisql.exe

    Доступа к другой базе SAP Sybase SQL Anywhere Interactive SQL в контексте подключенной нет

    Реконнект возможен, но когда необходимо взаимодействие между базами одного и того же сервера постоянный реконнект не целесообразен да и как тестировать скрипты в Interactive SQL dbisql.exe без реконнекта к другим базам в интерактивном окне запроса — доступа то нет?

    Так в том и вопрос: как получить доступ к другой базе этого же сервера при подключенной базе SAP Sybase SQL Anywhere Interactive SQL dbisql.exe без реконнекта в интерактивном окне запроса?

    Каким образом возможна смена текущей базы данных и получение доступа к другой базе в составе одного и того же сервера Engine SAP Sybase SQL Anywhere командами SQL без повторного коннекта

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение kreator » 21 Март 2020, 21:18

    SQL Query SELECT: Get information from Table other Database of this SAP Sybase SQL Anywhere Server

    Сообщение Developer » 21 Март 2020, 22:45

    Kreator, извини, но при всём твоём авторитете для меня, ты не прав

    У меня есть только один процесс DbsrvXX.exe который инициирует ServerName — cам SAP Sybase SQL Anywhere Engine и одновременно монтирует несколько физических файлов баз данных *.db и журналов *.log и *.mlg а не несколько процессов DbsrvXX.exe Engine между которыми, как ты правильно заметил нет никакой связи

    ServerName — имя сервера Egine SAP Sybase ASA
    Main — база данных в составе сервера SAP Sybase ASA — ServerName
    Work — база данных в составе сервера SAP Sybase ASA — ServerName

    Когда работаешь с Interactive SQL вызванной из Sybase Central то уже получен доступ ко всем базам данного сервера ServerName (персонально на каждую базу), так вот как получить доступ в SQL запросе к другой базе:

    Interactive SQL — текущая база — Main (вверху слева — название текущей базы) получить запрос:

    Внедрение SQL-кода

    Внедрение SQL-кода — (англ. SQL injection) — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.

    Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

    Атака типа внедрения SQL может быть возможна из-за некорректной обработки входящих данных, используемых в SQL-запросах.

    Разработчик прикладных программ, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия внедрению SQL.

    Илон Маск рекомендует:  Заголовок группы элементов формы legend

    Принцип атаки внедрения SQL

    Если на сервер передан параметр >

    SELECT * FROM news WHERE >

    Но если злоумышленник передаст в качестве параметра >

    SELECT * FROM news WHERE >

    Таким образом, изменение входных параметров путём добавления в них конструкций языка SQL вызывает изменение в логике выполнения SQL-запроса (в данном примере вместо новости с заданным идентификатором будут выбраны все имеющиеся в базе новости, поскольку выражение 1=1 всегда истинно).

    Внедрение в строковые параметры

    Сделав запрос вида http://example.org/script.php?search_text=Test мы получим выполнение следующего SQL-запроса:

    Но, внедрив в параметр search_text символ кавычки (который используется в запросе), мы можем кардинально изменить поведение SQL-запроса. Например, передав в качестве параметра search_text значение ‘)+and+(news_ >

    Язык SQL позволяет объединять результаты нескольких запросов при помощи оператора UNION. Это предоставляет злоумышленнику возможность получить несанкционированный доступ к данным.

    Рассмотрим скрипт отображения новости (идентификатор новости, которую необходимо отобразить, передается в параметре id):

    Если злоумышленник передаст в качестве параметра id конструкцию —1 UNION SELECT 1,username, password,1 FROM admin, это вызовет выполнение SQL-запроса:

    Так как новости с идентификатором −1 заведомо не существует, из таблицы news не будет выбрано ни одной записи, однако в результат попадут записи, несанкционированно отобранные из таблицы admin в результате инъекции SQL.

    Использование UNION + group_concat()

    В некоторых случаях хакер может провести атаку, но не может видеть более одной колонки. В случае MySQL взломщик может воспользоваться функцией:

    которая объединяет несколько колонок в одну. Например, для примера данного выше вызов функции будет таким:

    Экранирование хвоста запроса

    Зачастую, SQL-запрос, подверженный данной уязвимости, имеет структуру, усложняющую или препятствующую использованию union. Например скрипт:

    отображает имя автора новости по передаваемому идентификатору id только при условии, что имя начинается с буквы а, и внедрение кода с использованием оператора UNION затруднительно.

    В таких случаях, злоумышленниками используется метод экранирования части запроса при помощи символов комментария(/* или — в зависимости от типа СУБД).

    В данном примере, злоумышленник может передать в скрипт параметр id со значением —1 UNION SELECT password FROM admin/*, выполнив таким образом запрос:

    в котором часть запроса ( AND author LIKE (‘a%’)) помечена как комментарий и не влияет на выполнение.

    Для разделения команд в языке SQL используется символ ; (точка с запятой), внедряя этот символ в запрос, злоумышленник получает возможность выполнить несколько команд в одном запросе, однако не все диалекты SQL поддерживают такую возможность.

    Например, если в параметры скрипта:

    $ ];
    $res = mysql_query(«SELECT * FROM news WHERE >
    злоумышленником передается конструкция, содержащая точку с запятой, например 12;INSERT INTO admin (username, password) VALUES (‘HaCkEr’, ‘foo’); то в одном запросе будут выполнены 2 команды:

    и в таблицу admin будет несанкционированно добавлена запись HaCkEr.

    Методика атак типа внедрение SQL-кода

    Поиск скриптов, уязвимых для атаки

    На данном этапе злоумышленником изучается поведение скриптов сервера при манипуляции входными параметрами с целью обнаружения их аномального поведения. Манипуляция происходит всеми возможными параметрами:

    # Данными передаваемыми через методы POST и GET
    # Значениями [HTTP-Cookie]
    # HTTP_REFERER (для скриптов)
    # AUTH_USER и AUTH_PASSWORD (при использовании аутентификации)

    Как правило, манипуляция сводится к подстановке в параметры символа одинарной (реже двойной или обратной) кавычки.

    Аномальным поведением считается любое поведение, при котором страницы, получаемые до и после подстановки кавычек, различаются (и при этом не выведена страница о неверном формате параметров).

    Наиболее частые примеры аномального поведения:

    # выводится сообщение о различных ошибках;
    # * при запросе данных (например, новости или списка продукции) запрашиваемые данные не выводятся вообще, хотя страница отображается
    и т. д. Следует учитывать, что известны случаи, когда сообщения об ошибках, в силу специфики разметки страницы, не отображаются в браузере, хотя и присутствуют в её HTML-коде.

    Комментирование остатка строки:
    MySQL /* .
    MS SQL — .
    Oracle — . или /* .
    MS Access Внедрение в запрос NULL‑байта: %00.
    PostgreSQL — .
    Sybase — .
    IBM DB2 — .
    Ingres — .

    Получение версии:
    MySQL version()
    MS SQL @@version
    Oracle select banner
    from v$version
    PostgreSQL version()
    Sybase @@version
    IBM DB2 select versionnumber from sysibm.sysversions
    Ingres dbmsinfo(‘_version’)

    Конкатенация строк:
    MySQL concat (string1, string2)
    MS SQL string1 + string2
    Oracle string1 || string2
    или concat (string1, string2)
    PostgreSQL string1 || string2
    Sybase string1 + string2
    IBM DB2 string1 || string2 или string1 concat string2
    Ingres string1 || string2

    Защита от атак типа внедрение SQL-кода

    Для защиты от данного типа атак необходимо тщательно фильтровать входные параметры, значения которых будут использованы для построения SQL-запроса.

    Фильтрация строковых параметров:

    Предположим, что код, генерирующий запрос (на языке программирования Паскаль), выглядит так:

    Чтобы внедрение кода было невозможно, для некоторых СУБД, в том числе, для MySQL, требуется брать в кавычки все строковые параметры. В само́м параметре заменяют кавычки на \», апостроф на \’, обратную косую черту на \\ (это называется «экранировать спецсимволы»).

    Это можно делать таким кодом:

    Для PHP фильтрация может быть такой:

    Фильтрация целочисленных параметров

    Возьмём другой запрос:

    В данном случае поле id имеет числовой тип, и его нельзя брать в кавычки. Поэтому «закавычивание» и замена спецсимволов на escape-последовательности не проходит. В таком случае помогает проверка типа; если переменная id не является числом, запрос вообще не должен выполняться.

    Например, на Delphi для противодействия таким инъекциям помогает код:

    В случае ошибки функция StrToInt вызовет исключение EConvertError, и в его обработчике можно будет вывести сообщение об ошибке. Двойное преобразование обеспечивает корректную реакцию на числа в формате $132AB (шестнадцатеричная система счисления). На стандартном Паскале, не умеющем обрабатывать исключения, код несколько сложнее.

    Для PHP этот метод будет выглядеть так:

    $query = ‘SELECT * FROM users WHERE >

    Усечение входных параметров

    Для внесения изменений в логику выполнения SQL-запроса требуется внедрение достаточно длинных строк. Так, минимальная длина внедряемой строки в вышеприведённых примерах составляет 8 символов («1 OR 1=1»). Если максимальная длина корректного значения параметра невелика, то одним из методов защиты может быть максимальное усечение значений входных параметров.

    Например, если известно, что поле id в вышеприведённых примерах может принимать значения не более 9999, можно «отрезать лишние» символы, оставив не более четырёх:

    Использование параметризованных запросов

    Межбазовый запрос на Transact-SQL

    Речь сегодня пойдет об очень полезной возможности в SQL это межбазовый запрос. Данный вид запроса просто незаменим, если у Вас существует несколько баз данных на одном сервере или даже на разных серверах, а так как иногда требуется получить данные сразу отовсюду, например, для отчета, то межбазовый запрос лучшее решение этой задачи.

    Примечание! Сразу хочу сказать, что все примеры будем пробовать на Transact-SQL MS Sql Server 2008 в Management Studio, так как в других СУБД синтаксис будет отличаться. Также хочу заметить, что все примеры ниже требуют начальных знаний SQL, поэтому советую для начала ознакомиться с материалами: Язык запросов SQL – Оператор SELECT, Добавляем в таблицу новую колонку на SQL, Сочетание строковых функций на Transact-SQL, Transact-sql – Табличные функции и временные таблицы эти статьи помогут Вам приобрести начальные знания в SQL.

    И так приступим, сначала как обычно немного теории, для того чтобы понять, что такое межбазовый запрос и для чего он служит, а потом как обычно рассмотрим несколько практических примеров.

    Межбазовый запрос

    Межбазовый запрос – это запрос, который в процессе своего выполнения подключается к разным базам данных, а также в некоторых случаях к разным серверам баз данных.

    А теперь давайте определимся, для каких целей могут служить межбазовые запросы, допустим, у Вас есть 3 базы данных, 2 из них расположены на одном MSSQL сервере, а одна на другом. Все они служат для какой-то определенной задачи, может быть у них даже схожая структура, но это не важно и Вам как программисту иногда требуется выгружать данные из всех баз, например, для того чтобы предоставить эти данные начальству, и Вы скорей всего запускаете запросы из каждой базы или переключаетесь из менеджера запросов на работу с той ли иной базой, но гораздо удобней было бы запустить один запрос и получить сразу все данные. Именно для этого я пользуюсь данного вида запросами, но Вы, наверное, можете найти применение и для других задач. Если Вы сталкивались с такого рода задачами, то Вам просто необходимо узнать что такое межбазовый запрос.

    Примеры межбазовых запросов

    И первый пример он достаточно простой, требуется тогда когда необходимо получить данные из нескольких баз расположенных на одном сервере. Для объединения этих данных будем использовать конструкцию union all, которую мы рассматривали в статье – union и union all на Transact-SQL .

    И для начала, допустим, у нас есть две базы данных (test и test2), схемы dbo в которых мы создали вот такие таблицы:

    Таблица в базе test

    Таблица в базе test2

    Я их заполнил тестовыми данными, сейчас увидите какими, и для того чтобы получить данные из этих таблиц напишем вот такой запрос:

    Как видите синтаксис очень простой:

    Но результата в вышеуказанном запросе будет два, и для того чтобы объединить эти запросы, используем конструкцию union all.

    И результат будет уже один. И с помощью данного межбазового запроса Вы легко можете объединить данные, а еще для удобства, чтобы каждый раз не писать текст запроса можете создать представление views, для того чтобы обращаться напрямую к этому представлению.

    Теперь давайте рассмотрим пример посложней, когда требуется получить данные из базы, которая располагается на другом сервере.

    Для этого мы будем использовать конструкцию opendatasource.

    Сразу скажу, что opendatasource работает, только если на сервере выставлен параметр Ad Hoc Distributed Queries со значением 1. Для того чтобы посмотреть этот параметр выполните процедуру sp_configure и посмотрите значение данного параметра:

    • config_value — это значение которое внеслось но еще не сохранилось, т.е. сервер еще не переконфигурировался;
    • run_value – текущее значение данного параметра, т.е. с которым работает сервер в данный момент.

    Кстати данная процедура возвращает очень много конфигурационных параметров, которые Вы можете посмотреть.

    И для того чтобы изменить данный параметр, используем туже самую процедуру, синтаксис:

    А для того чтобы сконфигурировать сервер с новым значением, запустим процедуру reconfigure, и весь запрос будет выглядеть вот так:

    Ну а теперь можем приступать непосредственно к запросу, который подключится к серверу и получит необходимые данные. Для примера я буду подключаться сам к себе к тем же таблицам.

    Как видите результат тот же самый.

    Здесь мы указали в первом параметре провайдер источника данных, т.е. SQL server (‘sqlncli’) и задали строку подключения:

    • Data Source – это адрес сервера баз данных;
    • Integrated Security=SSPI – при подключении использовать проверку подлинности Windows, т.е. аутентификация и авторизация пользователя будет проходить по учетным данным Windows, отлично подходит, если в сети развернута AD(Active Directory).

    А если Вы хотите использовать проверку подлинности на уровне SQL сервера, то придется писать имя пользователя и пароль (которые должны быть созданы на SQL сервере) в строке подключения, например, абсолютно такой же результат, как и выше, получится, если мы напишем вот такой запрос:

    Т.е. вместо параметра Integrated Security мы укажем параметры:

      user >Примечание!Opendatasource может подключаться и другим отличным от SQL сервера источникам для этого в параметрах указываете нужный Вам провайдер, например, для подключения к Excel документу можете использовать вот такой запрос (Синтаксис):

    По межбазовым запросам все, надеюсь, данный материал был Вам интересен, и пригодится Вам на практике.

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL