Определенная пользователем константа или литерал MySQL для использования в операторах CREATE - PullRequest
0 голосов
/ 02 марта 2019

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

SET @moneyD = 6;
SET @priceM = 18; -- 999 billion

CREATE DATABASE IF NOT EXISTS `saver`;

CREATE TABLE `saver`.`test_Symbol` (
    `symbolId` BINARY(16) NOT NULL,
    `symbol` VARCHAR(32) NOT NULL,
    `dateCreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`symbolId`),
    INDEX `symbolIndex` (`symbol` ASC)
);

CREATE TABLE `saver`.`test_SymbolChart` (
    `symbolChartId` BINARY(16) NOT NULL,
    `symbolId` BINARY(16) NOT NULL,
    `date` TIMESTAMP NOT NULL,
    `open` DECIMAL(@priceM, @moneyD) NULL,
    `high` DECIMAL(@priceM, @moneyD) NULL,
    `low` DECIMAL(@priceM, @moneyD) NULL,
    `close` DECIMAL(@priceM, @moneyD) NULL,
    `volume` INT NULL,
    `dateCreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`symbolChartId`),
    INDEX `symbolIdIndex` (`symbolId` ASC)
);

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

Как еще можно добиться желаемого поведения?

1 Ответ

0 голосов
/ 02 марта 2019

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

SET @sql = CONCAT('CREATE TABLE `saver`.`test_SymbolChart` ( 
    `symbolChartId` BINARY(16) NOT NULL, 
    `symbolId` BINARY(16) NOT NULL, 
    `date` TIMESTAMP NOT NULL, 
    `open` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `high` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `low` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `close` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `volume` INT NULL,
    `dateCreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`symbolChartId`),
    INDEX `symbolIdIndex` (`symbolId` ASC)
)');
PREPARE stmt FROM @sql;
EXECUTE stmt;

Демонстрация на dbfiddle

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