0

船のクラスの火力を見つける手順を書こうとしています。(火力は砲の数 * 排気量の 3 乗)

関係:

Classes(class, type, country, numGuns, bore, displacement)

私がこれまでに試したこと...

mysql> CREATE PROCEDURE firePower(in className VARCHAR(50), out p int)
-> begin
-> set p = (SELECT numGuns * displacement * displacement * displacement FROM classes
WHERE class = className);
-> end
-> //
Query OK, 0 rows affected (0.35 sec)

mysql> CALL firePower(Iowa, @p)//
ERROR 1054 (42S22): Unknown column 'Iowa' in 'field list'
mysql> SELECT * FROM classes//
+----------------+------+---------+---------+------+--------------+
| class          | type | country | numGuns | bore | displacement |
+----------------+------+---------+---------+------+--------------+
| Bismarck       | bb   | Germany |       8 |   16 |        42000 |
| Iowa           | bb   | USA     |       9 |   16 |        46000 |
| Kongo          | bc   | Japan   |       8 |   14 |        32000 |
| North Carolina | bb   | USA     |       9 |   16 |        37000 |
| Renown         | bc   | Britain |       6 |   15 |        32000 |
| Revenge        | bb   | Britain |       8 |   15 |        29000 |
| Tennessee      | bb   | USA     |      12 |   14 |        32000 |
| Yamato         | bb   | Japan   |       9 |   18 |        65000 |
+----------------+------+---------+---------+------+--------------+
8 rows in set (0.00 sec)

mysql> CALL firePower(Bismarck, @p)//
ERROR 1054 (42S22): Unknown column 'Bismarck' in 'field list'
mysql> 

私の問題は、今自分の手順を呼び出すことができないように見えることです...?

4

1 に答える 1

1

呼び出しで引用Bismarckしていないため、プロシージャはそれを列名として解釈しています。単一引用符を追加すると、実際の文字列と照合されます。

mysql> CALL firePower('Bismarck', @p)//
Query OK, 0 rows affected, 1 warning (0.00 sec)
于 2012-04-23T17:49:03.383 に答える